我正在学习jquery我试图通过ajax获取一些数据。
这是代码
$(function () {
var allProductsData;
var gotProducts = new Array();
var productsWithDelete = new Array();
$('.addProducts').on('keyup', function (event) {
var searchVal = $(this).val().trim();
if (searchVal.length > 0) {
$.ajax({
url: 'http://localhost/exhibition/admin/default/searchProducts',
data: {
products: $(this).val(),
},
type: 'POST',
dataType: 'html',
success: function (msg) {
allProductsData = msg;
alert(allProductsData); //No. 1
}
});
alert(allProductsData); //No. 2
}
alert(allProductsData); // No. 3
});
});
我从服务器返回的值是1
。如您所见,我已将该值存储在全局变量allProductsData
中。但是当我尝试在3个不同的地方(No 1,No 2,No 3)提醒 allProductsData 时。然后我得到不同的值,即
1
No 1 //这是正确的
在第2号未定义 //这是不正确的
在3号时 1 //再次正确
的问题
为什么我在那里得到未定义的值?
答案 0 :(得分:4)
AJAX中的A代表异步,因此您无法对正常的同步调用进行操作。在收到来自服务器的响应后调用警报No 1.
,它可能(但也可能不会)在警报No 2.
之前调用。然后,调用No 2.
并且不保证它已经从ajax调用中分配了值。
我认为No 3.
具有正确价值,因为在致电No 1.
和No 2.
后,您的服务器设法以正确的价值回复您。
为了获得始终正确的值,请在成功函数回调中操作响应。
答案 1 :(得分:1)
您唯一可以确定allProductsData
定义的地方是success
回调。一旦发送了呼叫,就会评估ajax呼叫之后的代码,而不是在收到响应时。
您应该将函数中需要allProductsData
的所有代码放入success
回调中的调用中。否则,您永远无法确定allProductsData
是否已定义。