Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [ajax] Jak przekazać zmienną "w górę" z Ajax.Request
qBK
post
Post #1





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 9.01.2007
Skąd: Wrocław

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


Witam, od niedawna bawię się ajaksem i mam następujący problem:
  1. <?php
  2. function getValue(id, mode)
  3. {
  4. var url = 'http://server/x.php';
  5. var pars = 'mode='+mode+'&id=' + id;
  6.  
  7. var output = '';
  8.  
  9. var myAjax = new Ajax.Request(
  10. url,
  11. {
  12. method: 'get',
  13. parameters: pars,
  14. onComplete: function(originalRequest) {
  15. // ten output ma iść "na zewnątrz"
  16. output = originalRequest.responseText;
  17. }
  18. }
  19. );
  20. return output;
  21. }
  22. ?>


Chodzi mi o to, żeby w linijce 16. wyeksportować jakoś zmienną output żebym mógł ją zwrócić w 20. Dodam że korzystam z prototype jeśli to ważne.
Go to the top of the page
+Quote Post
revyag
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 2 258
Pomógł: 16
Dołączył: 21.09.2004
Skąd: Kielce

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


A czemu nie zrobisz tak:
Kod
onComplete: function(originalRequest) {
    //ten output ma iść "na zewnątrz"
    return  originalRequest.responseText;
}


Ten post edytował revyag 13.08.2008, 13:02:18
Go to the top of the page
+Quote Post
qBK
post
Post #3





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 9.01.2007
Skąd: Wrocław

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


Gdybym zrobił tak jak piszesz, to ta 'wewnętrzna' funkcja onComplete: function(originalRequest) { }, która jest tworzona wewnątrz obiektu Ajax.Request, zwróciłaby wartość, a nie funkcja 'zewnętrzna' getValue; to nie działa tak jak przerwanie w pętli typu na przykład
  1. <?php
  2. function x()
  3. {
  4.  for($i=1; $i<10; ++$i)
  5.  {
  6.  if($i == 4) return;
  7.  }
  8. }
  9. ?>
Go to the top of the page
+Quote Post
revyag
post
Post #4





Grupa: Przyjaciele php.pl
Postów: 2 258
Pomógł: 16
Dołączył: 21.09.2004
Skąd: Kielce

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


Wydaje mi się że asynchronicznie tego nie zrobisz. Nie wiem jak jest w prototype, ale jquery umożliwia synchroniczny request przypisujący wynik żądania bezpośrednio do zmiennej. Poszukaj w dokumentacji, może coś piszą o tym.
Tak to w jquery wygląda:
Kod
var html = $.ajax({ url: "some.php",  async: false }).responseText;
Go to the top of the page
+Quote Post
paziek
post
Post #5





Grupa: Zarejestrowani
Postów: 207
Pomógł: 25
Dołączył: 16.11.2006

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


uh.. asynchronicznie to nie bardzo

Musisz przekazać tą zmienną w onComplete: function(originalRequest) {, czyli tam gdzie ją dostajesz. W sensie - dostałem zmienną, teraz ją użyje! Wywołam sobie funkcje itp. która ją potrzebują właśnie tutaj.

Inaczej możesz zrobić to tak, że zadeklarujesz tą zmienną globalnie (przed tą funkcją getValue() ) i w funkcj, która ma z niej korzystać będziesz sprawdzał czy ta zmienna już jest dostępna za pomocą window.setInterval() ... ale to nie ma dla mnie sensu, skoro możesz mieć podobny efekt robiąc to co napisałem wyżej.

Jest też trzecia metoda - pobieranie AJAX synchroniczny. Wtedy wykonywanie JS się zablokuje do czasu aż pobierze te dane.
Go to the top of the page
+Quote Post
qBK
post
Post #6





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 9.01.2007
Skąd: Wrocław

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


Cytat(paziek @ 15.08.2008, 11:55:12 ) *
uh.. asynchronicznie to nie bardzo

Musisz przekazać tą zmienną w onComplete: function(originalRequest) {, czyli tam gdzie ją dostajesz. W sensie - dostałem zmienną, teraz ją użyje! Wywołam sobie funkcje itp. która ją potrzebują właśnie tutaj.


Coś mniej więcej takiego zrobiłem obchodząc problem, bo żadnych skomplikowanych rzeczy nie musiałem robić, ale chciałem się dowiedzieć czy da się to wykonać inaczej. Dzięki za wskazówki.
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: 24.08.2025 - 22:17