Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Przekazywanie z AJAX do zmiennej w JS
starcode
post 17.03.2008, 12:03:13
Post #1





Grupa: Zarejestrowani
Postów: 28
Pomógł: 0
Dołączył: 18.06.2006

Ostrzeżenie: (0%)
-----


Witam!

Przeglądałem forum, jednak nie znalazłem odpowiedzi na moje pytanie.
Mianowicie, mam pole input, gdzie po zmianie jego wartości wykonywana jest funkcja JS.

  1. <input type="text" name="nazwa_pola" onchange="funkcja(this.value);"></input>


Funkcja w JS ma za pomocą AJAXA sprawdzić wartość generowaną przez PHP.

Kod java script:
  1. function funkcja(value){
  2. var error = '';
  3. advAJAX.get({
  4. url: "text.php?zmienna="+value,
  5. onSuccess : function(obj) { },
  6. onError : function(obj) { error = '0'; },
  7. onFinalization: function(obj) { error = obj.responseText; }
  8. });
  9.  
  10. .... <coś tam dalej się dzieje ze zmienną error>
  11. }


Problem jest w tym, że wartość zwracana przez AJAX nie jest zapisywan do zmiennej JS.
Z tego co wyczytałem to dlatego, że AJAX jest wykonywany asynchronicznie z JavąScript.

Stosując opóźnienie można to obejść - tylko, że nie bardzo coś takiego mi wychodzi.
Paradoksalnie pokazanie alertu w JS z dowolną treścią sprawia, że zmienna error ma odpowiednią wartość, ale jest to rozwiązanie prowizoryczne.

Zastosowanie pętli:

  1. while((error=='undefined' || !error || error=='') && i<1000){ i++; }


... teoretycznie działa, ale powoduje zawieszanie się przeglądarki i komunikaty o możliwości zakończenia skryptu.

Wiecie jak zrobić, aby wartość zwracana przez AJAX była zapisywana do zmiennej JAVASCRIPT?
Go to the top of the page
+Quote Post
batman
post 17.03.2008, 12:50:12
Post #2





Grupa: Moderatorzy
Postów: 2 921
Pomógł: 269
Dołączył: 11.08.2005
Skąd: 127.0.0.1




Możesz zrobić to tak:
Kod
onFinalization: function(obj) {
    error = obj.responseText;
    if(error == 'cos tam') {
        // zrob cos
    }
    else {
        // zrob cos innego
    }
}

lub tak:
Kod
onFinalization: function(obj) {
    error = obj.responseText;
    handleError(error);
}



function handleError(error) {
    // zrob cos lub cos innego w zlaeznosci od error
}


--------------------
I would love to change the world, but they won't give me the source code.
My software never has bugs. It just develops random features.
Go to the top of the page
+Quote Post
lord_t
post 17.03.2008, 18:53:43
Post #3





Grupa: Zarejestrowani
Postów: 603
Pomógł: 131
Dołączył: 24.07.2007
Skąd: Górny Śląsk

Ostrzeżenie: (0%)
-----


Dlaczego nie przypisujesz obj.resp.... w sekcji onSuccess? Z tego co się orientuję to tam to powinno mieć miejsce. onFinalization służy do innych celów.


--------------------
Go to the top of the page
+Quote Post
starcode
post 22.03.2008, 13:55:54
Post #4





Grupa: Zarejestrowani
Postów: 28
Pomógł: 0
Dołączył: 18.06.2006

Ostrzeżenie: (0%)
-----


Dzięki batman. Tak własnie to zrobiłem smile.gif

onsuccess jest wywoływane gdy polecenie ajax wykona się poprawnie
onfinalizaction zawsze gdy zostenie ono wykonane, bez znaczenia czy poprawnie czy nie.
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 24.07.2025 - 20:39