我需要从ajax返回值,但它每次都填充0,并且没有等待ajax进程完成var itemId=0;
作为全局值
getitemIDbyProductID(productId,getitemIDbyProductID_success);
alert(itemID + "itemgeted")
我做了这个
function getitemIDbyProductID(productId, callback) {
$.ajax({
type: "POST",
url: "Cot.aspx/getitemIDbyProductID",
data: JSON.stringify({ productId: productId }),
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (result) {
var value = 0;
value = JSON.parse(result.d);
itemID=callback(value)
callback(value);
},
error: function (msg) { }
});
}
function getitemIDbyProductID_success(total_percentage) {
alert(total_percentage +"fds"+itemID);
}
但它没有等到ajax完成,并给了我itemId=undefiend
您在此处成功设置了值:
function getitemIDbyProductID_success(total_percentage) {
itemID = total_percentage;
alert(total_percentage +"fds"+itemID);
}
但是,在调用this的代码中,您成功地再次设置了:
itemID=callback(value)
由于getitemIDbyProductID_success
不返回任何内容,因此返回值为undefined
。所以基本上你在设置itemID
后立即取消设置。
只需调用回调,不要使用其(不存在的)返回值:
callback(value);
此外,这不会像你想的那样:
getitemIDbyProductID(productId,getitemIDbyProductID_success);
alert(itemID + "itemgeted");
因为getitemIDbyProductID
执行异步操作。即使上述错误得到纠正,这个错误仍然存在。这是一个非常流行的问题的副本(答案比我能提供的要好得多)。
您可以这样做:
getitemIDbyProductID(productId,function(val){
itemID = val;
alert(itemID + "itemgeted");
});
基本上,您必须等待itemID被分配正确的值。