Dalam pengaturcaraan tak segerak, seperti dengan panggilan AJAX, pembolehubah yang dikembalikan daripada fungsi tidak tersedia serta-merta kerana panggilan itu sendiri tidak dilaksanakan serta merta. Dalam kes panggilan AJAX, panggilan dibuat secara tidak segerak, bermakna ia dilaksanakan di latar belakang manakala kod yang selebihnya terus dijalankan.
Isu yang anda hadapi ialah fungsi get_data dalam kod yang disediakan cuba untuk mengembalikan hasil panggilan AJAX secara langsung. Walau bagaimanapun, kerana panggilan tidak segerak, fungsi tidak boleh menunggu keputusan sebelum ia kembali.
Untuk menyelesaikan isu ini, fungsi get_data harus diubah suai untuk menggunakan panggilan balik fungsi. Fungsi panggil balik ialah fungsi yang dihantar ke fungsi lain sebagai hujah dan dilaksanakan kemudian, selepas fungsi pertama selesai.
Dalam kod yang disemak:
function get_data(data, destination, callback) { if (lock_get == 0) { lock_get = 1; $.ajax({ type: "POST", url: destination, async: true, data: data, success: function(data) { lock_get = 0; if (data && callback) { callback(data); } } }); } }
Untuk memanggil fungsi get_data dengan panggilan balik:
get_data(data, destination, function(test) { notice(test); });
Dalam contoh ini, fungsi panggil balik tanpa nama digunakan untuk mengendalikan hasil panggilan AJAX. Hasil panggilan akan dihantar ke fungsi notis.
Dengan menggunakan panggilan balik, fungsi get_data boleh memulakan panggilan AJAX dan kembali serta-merta, manakala fungsi panggil balik akan dilaksanakan kemudian apabila hasilnya tersedia.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengendalikan Nilai Pulangan Panggilan AJAX Asynchronous?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!