Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [js][ajax][php][xml] Wartość zwrotna tablicą
Hazel
post
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
Go to the top of the page
+Quote Post
nevt
post
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
Go to the top of the page
+Quote Post
Hazel
post
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:

  1. var objt = false;
  2. function zwroc()
  3. {
  4. return { 0: 'wartosc 1', 1: 'wartosc 2', 2: 'wartosc 3' };
  5. }
  6. function przypisz()
  7. {
  8. objt = zwroc();
  9. }
  10. <button onclick="przypisz();alert(objt.length);">


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
Go to the top of the page
+Quote Post
nevt
post
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 ...
Go to the top of the page
+Quote Post
Hazel
post
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.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 25.08.2025 - 07:45