Chcę używać jQuery ajax do pobierania danych z serwera.
Chcę umieścić definicję funkcji wywołania zwrotnego sukcesu poza .ajax()
blokiem, jak poniżej. Czy muszę więc zadeklarować zmienną dataFromServer
podobną do poniższej, aby móc użyć danych zwróconych z wywołania zwrotnego sukcesu?
Widziałem, jak większość ludzi definiuje wywołanie zwrotne sukcesu wewnątrz .ajax()
bloku. Czy więc poniższy kod jest poprawny, jeśli chcę zdefiniować wywołanie zwrotne sukcesu na zewnątrz?
var dataFromServer; //declare the variable first
function getData() {
$.ajax({
url : 'example.com',
type: 'GET',
success : handleData(dataFromServer)
})
}
function handleData(data) {
alert(data);
//do some stuff
}
źródło
deferred objects
wprowadzone? Nie widziałem tego wcześniej. Wydaje się też nieco kłopotliwe, ponieważ kod definiujący wywołanie zwrotne do użycia znajduje się w innej lokalizacji niż rzeczywiste wywołanie AJAX.success:
. Odłączenie wywołania zwrotnego od AJAX to dobra rzecz! Zobacz notatki, które właśnie dodałem na końcu mojej odpowiedzi.$.get()
na przykład, byłoby niemożliwe dodanieerror:
modułu obsługi, ponieważ$.get
go nie obsługuje. Jakkolwiek można dodać.fail
do odroczonego wyniku z$.get
.„Nowym” sposobem zrobienia tego od czasu jQuery 1.5 (styczeń 2011) jest użycie obiektów odroczonych zamiast przekazywania
success
wywołania zwrotnego. Powinieneś zwrócić wynik,$.ajax
a następnie użyć metod.done
,.fail
etc, aby dodać wywołania zwrotne poza$.ajax
wywołaniem .function getData() { return $.ajax({ url : 'example.com', type: 'GET' }); } function handleData(data /* , textStatus, jqXHR */ ) { alert(data); //do some stuff } getData().done(handleData);
To oddziela obsługę wywołań zwrotnych od obsługi AJAX, pozwala na dodawanie wielu wywołań zwrotnych, wywołań zwrotnych po awarii itp., A wszystko to bez konieczności modyfikowania oryginalnej
getData()
funkcji. Oddzielenie funkcjonalności AJAX od zestawu czynności do późniejszego wykonania to dobra rzecz!.Odroczenia pozwalają również na znacznie łatwiejszą synchronizację wielu zdarzeń asynchronicznych, których nie można łatwo zrobić po prostu
success:
Na przykład mógłbym dodać wiele wywołań zwrotnych, moduł obsługi błędów i poczekać, aż upłynie czas, zanim przejdę dalej:
// a trivial timer, just for demo purposes - // it resolves itself after 5 seconds var timer = $.Deferred(); setTimeout(timer.resolve, 5000); // add a done handler _and_ an `error:` handler, even though `getData` // didn't directly expose that functionality var ajax = getData().done(handleData).fail(error); $.when(timer, ajax).done(function() { // this won't be called until *both* the AJAX and the 5s timer have finished }); ajax.done(function(data) { // you can add additional callbacks too, even if the AJAX call // already finished });
Inne części jQuery również używają obiektów odroczonych - możesz bardzo łatwo zsynchronizować animacje jQuery z innymi operacjami asynchronicznymi.
źródło
success:
ponieważ deferreds prostu pracować o wiele lepiej.user:6782 deferred
o wiele więcej przykładów.alert
jednak… Osobiście użyłbymconsole.log(data)
lub jeśli jest to tablica:console.table(data)
:)Nie wiem, dlaczego definiujesz parametr poza skryptem. To jest niepotrzebne. Twoja funkcja zwrotna zostanie wywołana automatycznie ze zwracanymi danymi jako parametrem. Jest bardzo możliwe zdefiniowanie twojego wywołania zwrotnego poza
sucess:
iefunction getData() { $.ajax({ url : 'example.com', type: 'GET', success : handleData }) } function handleData(data) { alert(data); //do some stuff }
zostanie wywołana funkcja handleData i parametr przekazany do niej przez funkcję Ajax.
źródło
Spróbuj przepisać swój program obsługi sukcesu na:
Właściwość sukcesu metody Ajax wymaga jedynie odwołania do funkcji.
W swojej funkcji handleData możesz przyjąć do 3 parametrów:
źródło
Napisałbym :
var handleData = function (data) { alert(data); //do some stuff } function getData() { $.ajax({ url : 'example.com', type: 'GET', success : handleData }) }
źródło
dataFromServer
więc pierwsza linia może zostać usunięta.Nie musisz deklarować zmiennej. Funkcja sukcesu Ajax automatycznie przyjmuje do 3 parametrów:
Function( Object data, String textStatus, jqXHR jqXHR )
źródło
po kilku godzinach baw się nim i prawie się nudzą. cud przyszedł do mnie, to działa.
<pre> var listname = []; $.ajax({ url : wedding, // change to your local url, this not work with absolute url success: function (data) { callback(data); } }); function callback(data) { $(data).find("a").attr("href", function (i, val) { if( val.match(/\.(jpe?g|png|gif)$/) ) { // $('#displayImage1').append( "<img src='" + wedding + val +"'>" ); listname.push(val); } }); } function myfunction() { alert (listname); } </pre>
źródło
success : callback
jquery uruchomi twoją funkcję wywołanącallback
zdata
parametrem w niej zawartym.W twoim komponencie tj. Kątowy kod JS:
function getData(){ window.location.href = 'http://localhost:1036/api/Employee/GetExcelData'; }
źródło