Próbowałem uzyskać dane z połączenia AJAX i korzystałem z kodu

jQuery.ajax({
        type: 'POST',
        url: '/chatlog',
        success: exoticlangAjaxCompleted,
        data:'messageLog=' + privateMessageLogJson,
        dataType: 'json'
    });

Dane znajdowały się w tablicy JSON (Key = "Messagelog")

Dlaczego zadzwonił

    success: exoticlangAjaxCompleted,

Ale nie

    success: exoticlangAjaxCompleted(),

Lub

    success: exoticlangAjaxCompleted(messageLog) ??

Funkcja JS to:

function exoticlangAjaxCompleted(messageLog){
    console.log('exoticlangAjaxCompleted!');
    console.log('chat log is: ' + messageLog);
    console.log('chat log is: ' + dump(messageLog));
}
2
Trevor Newhook 24 sierpień 2012, 09:43

4 odpowiedzi

Najlepsza odpowiedź

Argument success oczekuje, że odniesienie do funkcji zostanie wywołane, gdy żądanie AJAX jest zakończone.

Z następującymi:

success: exoticlangAjaxCompleted,

Przechodzisz do funkcji zgodnie z wymaganiami.

Mając na uwadze, że w tej instancji:

success: exoticlangAjaxCompleted(),

Przywołujesz funkcję exoticlangAjaxCompleted i przekazując wynik do argumentu success. O ile Twoja funkcja zwróci funkcję, nie będzie działać!

4
ColinE 24 sierpień 2012, 05:47

Powodem, dla którego dawna praca składni jest dlatego, że success oczekuje obiektu funkcyjnego (w celu wywołania go z argumentami, jeśli chciał), gdzie tylko wywołanie funkcji nie zwraca obiektu funkcyjnego. Po wywołaniu funkcji za pomocą formularza function() produkuje wyjście (nawet jeśli produkcja jest niezdefiniowana) Dlatego też ten formularz działa:

...
success: function() {
    // Some callback code
}
...

Jak się mają różne? Aby pokazać, jak spójrzmy na konsolę WebKit:

Image showing the WebKit console, myFunc vs myFunc()

Jak widać, wykonanie {x0}} zwraca samą funkcję , podczas gdy myFunc() zwraca ** obiekt, który byłby bezużyteczny do select: *

2
Kyle Lacy 24 sierpień 2012, 05:53

Moim zrozumieniem jest to, że nie możesz przekazać argumentów w ten sposób.

Jeśli spróbujesz to zrobić:

success: function(){exoticlangAjaxCompleted(messageLog);},

Więc to może działać.

0
frshca 24 sierpień 2012, 05:45

Z dokumentów jQuery znajduje się sekcja dotycząca zwrotu sukcesu:

"Funkcja do wywołania, jeśli żądanie się powiedzie. Funkcja zostaje przekazywana trzy argumenty: dane zwracane z serwera, sformatowane zgodnie z parametrem DataType; ciąg opisujący status; i JQXHR (w jQuery 1.4.x, XMLHTPREQUEST) obiekt."

jQuery.ajax ()

Więc musisz zrobić sztuczkę, podobnie jak tutaj: Wzór dodatkowych parametrów

success: function(..){
...
}
0
Community 23 maj 2017, 12:20