![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 492 Pomógł: 33 Dołączył: 16.08.2007 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Witam.
Mam ciężką sytuację, dość dziwną. Posiadam kod JS pewnej aplikacji. Nie mogę go zmienić, po prostu go znam. I w tym cały problem - bez zmian kodu JS mam do tego dopisać kod działający po stronie serwera, w PHP. Fragment funkcji dołączonej do zdarzenia onreadystatechange wygląda tak: Kod if(request.readyState == 4){ if(request.status == 200){ if(formObjTyp.length > 0 && formObjTyp == "input"){ var resp = request.responseText; // Wartość zwrotna jest tablicą. var func = new Function("return "+resp); var objt = func(); var sel = document.createElement("select"); sel.setAttribute("name","countries"); createOptions(sel,objt); var newsel = document.getElementById("newsel"); reset(newsel); newsel.appendChild(sel); } Sęk tkwi w funkcji createOptions: Kod function createOptions(sel, _options) { if (_options == null || _options.length == 0) { return; } var opt = null; for (var i = 0; i < _options.length; i++) { opt=document.createElement("option"); opt.appendChild(document.createTextNode(_options[i])); sel.appendChild(opt); } } Nie mogę zmienić tego kodu. No a funkcja createOptions() spodziewa się tablicy jako drugiego parametru. Teraz pytanie, jak ułożyć taki kod PHP, żeby w zmiennej objt była tablica... (IMG:http://forum.php.pl/style_emoticons/default/blinksmiley.gif) Jeśli chodzi o mój wysiłek, to próbowałem z XML. Ale wtedy krzaczy się konstruktor Function("return" +resp), chyba że coś źle robiłem... Ten post edytował Hazel 10.02.2008, 13:00:41 |
|
|
![]()
Post
#2
|
|
Grupa: Przyjaciele php.pl Postów: 1 595 Pomógł: 282 Dołączył: 24.09.2007 Skąd: Reda, Pomorskie. Ostrzeżenie: (0%) ![]() ![]() |
tego w ogóle nie rozumiem...
Kod var resp = request.responseText; ... var func = new Function("return "+resp); var objt = func(); ... createOptions(sel,objt); dlaczego nie po prostu Kod var resp = request.responseText; ... createOptions(sel, resp); a co do tekstu zwracanego przez PHP to musi on mieć składnię JS Array, czyli coś w rodzaju Kod { 0:'wartosc 1', 1:'wartosc 2', 2:'wartosc 3', ... }
Ten post edytował nevt 10.02.2008, 14:35:46 |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 492 Pomógł: 33 Dołączył: 16.08.2007 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
No, hehe, mamy podobne zdanie.
Kodu JS nie tworzyłem ja, dałem go tak jak jest - też mnie zdziwiła obecność zupełnie niepotrzebnego konstruktora funkcji, ale myślałem że się nie znam (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) A ten konstruktor mi strasznie psuł koncepcję. No dobra, zrobiłem tak, że linia zwracająca tego konstruktora wygląda tak: return { 0: 'wartosc1', 1: 'wartosc2', 2: 'wartosc3' } Ale jak kontroluję właściwość length zmiennej, która otrzymuje taką wartość, to jest to 47, czyli widzi ciąg, a nie tablicę. Zresztą, abstrakcyjnie oderwany od projektu kod: zwraca niestety undefined. Na logikę powinien chyba zwrócić ilość elementów tablicy, czyli 3. A dokładnie o coś takiego chodzi w tamtym kodzie, z którym pracuję. Coś robię nie tak? Ten post edytował Hazel 10.02.2008, 19:06:30 |
|
|
![]()
Post
#4
|
|
Grupa: Przyjaciele php.pl Postów: 1 595 Pomógł: 282 Dołączył: 24.09.2007 Skąd: Reda, Pomorskie. Ostrzeżenie: (0%) ![]() ![]() |
a spróbuj zwrócić z php ciąg:
Kod new Array('ala', 'ma', 'kota'); // albo new Array(1, 2, 3); chyba właśnie po to jest ten manewr z nienazwaną funkcją, żeby można wprost przypisać kod JS ... |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 492 Pomógł: 33 Dołączył: 16.08.2007 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Haa, dokładnie (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)
W tym momencie też to zrozumiałem (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Dzięki wielkie. Działa. Napiszę jeszcze, że właściwość length zmiennej zawierajacej responseText to 31, czyli widzi ciąg. Natomiast jak przepuszczę to przez anonimową funkcję, to się robi ilość elementów tablicy zamiast długości ciągu. Dokładnie o to chodziło. Pozdrawiam. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 25.08.2025 - 07:45 |