Saya ingin menggunakan jQuery ajax untuk mengambil data dari server.
Saya ingin meletakkan definisi fungsi panggilan balik sukses di luar .ajax()
blok seperti berikut. Jadi, apakah saya perlu mendeklarasikan variabel dataFromServer
seperti berikut agar saya dapat menggunakan data yang dikembalikan dari callback sukses?
Saya telah melihat kebanyakan orang mendefinisikan sukses panggilan balik di dalam .ajax()
blok. Jadi, apakah kode berikut benar jika saya ingin mendefinisikan sukses panggilan balik di luar?
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
}
sumber
deferred objects
hal itu diperkenalkan? Saya belum pernah melihatnya sebelumnya. Selain itu, tampaknya sedikit berantakan, karena kode yang menentukan callback apa yang akan digunakan berada di lokasi yang berbeda dari panggilan AJAX yang sebenarnya.success:
. Memisahkan callback dari AJAX adalah hal yang baik ! Lihat catatan yang baru saja saya tambahkan di akhir jawaban saya.$.get()
misalnya, tidak mungkin menambahkanerror:
penangan karena$.get
tidak mendukungnya. Namun Anda dapat menambahkan a.fail
ke hasil yang ditangguhkan dari$.get
.Cara "baru" untuk melakukan ini sejak jQuery 1.5 (Jan 2011) adalah menggunakan objek yang ditangguhkan alih-alih meneruskan
success
callback. Anda harus mengembalikan hasil dari$.ajax
dan kemudian menggunakan metode.done
,.fail
etc untuk menambahkan callback di luar$.ajax
panggilan .function getData() { return $.ajax({ url : 'example.com', type: 'GET' }); } function handleData(data /* , textStatus, jqXHR */ ) { alert(data); //do some stuff } getData().done(handleData);
Ini memisahkan penanganan callback dari penanganan AJAX, memungkinkan Anda untuk menambahkan beberapa callback, callback kegagalan, dll, semuanya tanpa perlu mengubah
getData()
fungsi aslinya . Memisahkan fungsionalitas AJAX dari serangkaian tindakan yang harus diselesaikan setelahnya adalah hal yang baik! .Deferreds juga memungkinkan sinkronisasi yang lebih mudah untuk beberapa peristiwa asinkron, yang tidak dapat Anda lakukan dengan mudah
success:
Misalnya, saya dapat menambahkan beberapa callback, penanganan error, dan menunggu timer berlalu sebelum melanjutkan:
// 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 });
Bagian lain dari jQuery juga menggunakan objek yang ditangguhkan - Anda dapat menyinkronkan animasi jQuery dengan operasi asinkron lainnya dengan sangat mudah.
sumber
success:
karena penangguhan hanya bekerja jauh lebih baik.user:6782 deferred
untuk banyak contoh lagi.alert
meskipun ... Saya pribadi akan menggunakanconsole.log(data)
atau jika itu sebuah array:console.table(data)
:)Saya tidak tahu mengapa Anda mendefinisikan parameter di luar skrip. Itu tidak perlu. Fungsi panggilan balik Anda akan dipanggil dengan data yang dikembalikan sebagai parameter secara otomatis. Sangat mungkin untuk menentukan callback Anda di luar
sucess:
iefunction getData() { $.ajax({ url : 'example.com', type: 'GET', success : handleData }) } function handleData(data) { alert(data); //do some stuff }
fungsi handleData akan dipanggil dan parameter diteruskan ke sana oleh fungsi ajax.
sumber
Coba tulis ulang penangan sukses Anda menjadi:
Properti sukses dari metode ajax hanya membutuhkan referensi ke sebuah fungsi.
Dalam fungsi handleData, Anda dapat menggunakan hingga 3 parameter:
sumber
Saya akan menulis :
var handleData = function (data) { alert(data); //do some stuff } function getData() { $.ajax({ url : 'example.com', type: 'GET', success : handleData }) }
sumber
dataFromServer
sehingga baris pertama dapat dihapus.Anda tidak perlu mendeklarasikan variabel. Fungsi sukses Ajax secara otomatis membutuhkan hingga 3 parameter:
Function( Object data, String textStatus, jqXHR jqXHR )
sumber
setelah beberapa jam bermain dengannya dan hampir menjadi membosankan. keajaiban datang padaku, itu berhasil.
<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>
sumber
success : callback
jquery akan memicu fungsi Anda dipanggilcallback
dengandata
parameter di dalamnya.Dalam komponen Anda yaitu kode JS sudut:
function getData(){ window.location.href = 'http://localhost:1036/api/Employee/GetExcelData'; }
sumber