我需要从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
答案 0 :(得分:1)
您在此处成功设置了值:
function getitemIDbyProductID_success(total_percentage) {
itemID = total_percentage;
alert(total_percentage +"fds"+itemID);
}
但是,在调用的代码中,您已成功将其设置为 :
itemID=callback(value)
由于getitemIDbyProductID_success
没有返回任何内容,因此返回值为undefined
。所以基本上你在设置后立即取消itemID
。
只需调用回调,不要使用其(非现存)返回值:
callback(value);
另外,这不会按照您的想法行事:
getitemIDbyProductID(productId,getitemIDbyProductID_success);
alert(itemID + "itemgeted");
因为getitemIDbyProductID
执行异步操作。即使纠正了上述错误,此错误仍然存在。这一个是非常流行问题的复制品(答案远比我能提供的好)here。
答案 1 :(得分:0)
您可以这样做:
getitemIDbyProductID(productId,function(val){
itemID = val;
alert(itemID + "itemgeted");
});
基本上,您必须在itemID被赋予正确的值之前等待。