Saya ingin menggunakan jQuery ajax untuk mengambil data dari server.
Saya ingin menempatkan keberhasilan fungsi callback definisi luar .ajax()
blok seperti berikut ini. Jadi apakah saya perlu mendeklarasikan variabel dataFromServer
seperti berikut ini sehingga saya akan bisa menggunakan kembali data dari keberhasilan callback?
I've melihat kebanyakan orang mendefinisikan sukses callback dalam .ajax()
block. Jadi kode berikut tepat jika saya ingin menentukan keberhasilan callback 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
}
"baru" cara untuk melakukan hal ini sejak jQuery 1.5 (Jan 2011) adalah dengan menggunakan tangguhan benda-benda bukan lewat sebuah keberhasilan
callback. Anda harus return hasil dari $.ajax
dan kemudian menggunakan .selesai
, .gagal
dll metode untuk menambahkan callback outside dari $.ajax
call.
function getData() {
return $.ajax({
url : 'example.com',
type: 'GET'
});
}
function handleData(data /* , textStatus, jqXHR */ ) {
alert(data);
//do some stuff
}
getData().done(handleData);
Ini decouples callback penanganan dari AJAX penanganan, memungkinkan anda untuk menambahkan beberapa callback, kegagalan callback, dll, semua tanpa pernah perlu untuk memodifikasi asli getData()
fungsi. Memisahkan fungsi AJAX dari serangkaian tindakan yang akan selesai setelah itu adalah a hal yang baik!.
Deferreds juga memungkinkan untuk lebih mudah sinkronisasi beberapa peristiwa asinkron, yang dapat anda't dengan mudah dilakukan hanya dengan sukses
Sebagai contoh, saya bisa menambahkan beberapa callback, error handler, dan menunggu waktu untuk 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 menggunakan tangguhan objek juga - anda dapat menyinkronkan animasi jQuery dengan lainnya async operasi yang sangat mudah dengan mereka.
Hanya menggunakan:
function getData() {
$.ajax({
url : 'example.com',
type: 'GET',
success : handleData
})
}
Keberhasilan
properti hanya membutuhkan referensi untuk sebuah fungsi, dan melewati data sebagai parameter untuk fungsi ini.
Anda dapat mengakses handleData
fungsi seperti ini karena cara handleData
diumumkan. JavaScript akan mengurai kode anda untuk deklarasi fungsi sebelum menjalankannya, sehingga anda'akan dapat menggunakan fungsi dalam kode yang's sebelum deklarasi. Hal ini dikenal sebagai angkat.
Ini doesn't hitung untuk fungsi-fungsi yang menyatakan seperti ini:
var myfunction = function(){}
Mereka hanya tersedia ketika penerjemah melewati mereka.
Lihat pertanyaan ini untuk informasi lebih lanjut tentang 2 cara menyatakan functions
Aku tidak tahu mengapa anda mendefinisikan parameter di luar naskah. Yang tidak perlu. Anda fungsi callback yang akan dipanggil dengan kembali data sebagai parameter secara otomatis. Hal ini sangat mungkin untuk menentukan callback luar sukses:
yaitu
function getData() {
$.ajax({
url : 'example.com',
type: 'GET',
success : handleData
})
}
function handleData(data) {
alert(data);
//do some stuff
}
yang handleData fungsi akan dipanggil dan parameter yang diberikan oleh fungsi ajax.
Mencoba menulis ulang kesuksesan anda handler untuk:
success : handleData
Keberhasilan milik dari metode ajax hanya membutuhkan referensi untuk sebuah fungsi.
Di handleData fungsi anda dapat mengambil hingga 3 parameter:
object data
string textStatus
jqXHR jqXHR
setelah beberapa jam bermain dengan itu dan hampir menjadi kusam. keajaiban datang kepada saya, itu bekerja.
<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>
Dalam komponen aku.e angular JS kode:
function getData(){
window.location.href = 'http://localhost:1036/api/Employee/GetExcelData';
}