Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Prototype] Problem z dostępem do zmiennej w return?
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
Victor152
Witam. Mam taką funkcje:
[JAVASCRIPT] pobierz, plaintext
  1. function getPatient(phrase) {
  2. new Ajax.Request('ajax.php',
  3. {
  4. method: 'get',
  5. parameters: {type: 1, name: phrase},
  6. onSuccess: function(transport) {
  7. var json = transport.responseText.evalJSON();
  8. },
  9. onFailure: function() {
  10. alert('Something went wrong...');
  11. }
  12. });
  13.  
  14. return json;
  15. }
[JAVASCRIPT] pobierz, plaintext


I za chiny ludowe nie chce mi zwrócić transport.responseText.evalJSON(); - w kodzie który wywołuje tą funkcję mam by wypełniał określonego diva returnem.

Zaś:
[JAVASCRIPT] pobierz, plaintext
  1. function getPatient(phrase) {
  2. new Ajax.Request('ajax.php',
  3. {
  4. method: 'get',
  5. parameters: {type: 1, name: phrase},
  6. onSuccess: function(transport) {
  7. alert(transport.responseText.evalJSON());
  8. },
  9. onFailure: function() {
  10. alert('Something went wrong...');
  11. }
  12. });
  13.  
  14. return json;
  15. }
[JAVASCRIPT] pobierz, plaintext


Ładnie pokazuje komunikat z zawartością (w tym wypadku klasa więc pokazuje informacje ze object).

Motam się z tym drugą godzinę i nie mam pomysłów. Może ktoś mógłby mi wskazać dobry trop?

#Edit:
Firefox mówi:
Błąd: json is not defined
Plik źródłowy: #
Wiersz: #
skowron-line
A nie wpadłeś na to żeby zrobić tak
[JAVASCRIPT] pobierz, plaintext
  1. function getPatient(phrase) {
  2. new Ajax.Request('ajax.php',
  3. {
  4. method: 'get',
  5. parameters: {type: 1, name: phrase},
  6. onSuccess: function(transport) {
  7. return transport.responseText.evalJSON();
  8. },
  9. onFailure: function() {
  10. alert('Something went wrong...');
  11. }
  12. });
  13.  
  14.  
  15. }
[JAVASCRIPT] pobierz, plaintext

i tak ze zmienna json nic nie robisz
Victor152
Oj wpadłem, i co dostaje w returnie?
Cytat
undefined
erix
Zawsze będzie undefined...

Z tego, co mi wiadomo, to Prototype, podobnie jak jQuery wykonuje funkcje AJAX w kontekście frameworka, a nie funkcji. Powoduje to taką sytuację, iż nie możesz skorzystać po prostu z return.

Do tego pozostaje jeszcze kwestia tego, że żądania lecą asynchronicznie, czyli funkcja sobie leci niezależnie od tego, co AJAX robi. No chyba, że przestawisz na tryb synchroniczny i wówczas:

[JAVASCRIPT] pobierz, plaintext
  1. function getPatient(phrase) {
  2. result = {};
  3. // dodaj tu przełączanie na tryb synchroniczny
  4. new Ajax.Request('ajax.php',
  5. {
  6. method: 'get',
  7. parameters: {type: 1, name: phrase},
  8. onSuccess: function(transport) {
  9. result = transport.responseText.evalJSON();
  10. },
  11. onFailure: function() {
  12. alert('Something went wrong...');
  13. }
  14. });
  15.  
  16. return result;
  17. }
[JAVASCRIPT] pobierz, plaintext


Osobiście korzystam z tego typu konstrukcji (kodzę zwykle w jQ, więc takie zboczenie winksmiley.jpg):
[JAVASCRIPT] pobierz, plaintext
  1. function getSomething(what, callback){
  2. $.getJSON('script', {data: what}, callback);
  3. }
[JAVASCRIPT] pobierz, plaintext


Gdzie funkcja callback przyjmuje jeden parametr. Zaletą takiego rozwiązania jest to, że wszystko może wykonywać się asynchronicznie. Można jeszcze wykonać w ten sposób:

[JAVASCRIPT] pobierz, plaintext
  1. function getSomething(what){
  2. $.getJSON('script', {data: what}, function(data){ asd(data); });
  3. }
[JAVASCRIPT] pobierz, plaintext
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.