为什么我的var“temp”在ajax之后为0?
function calc7() {
var temp = 0;
$.ajax({
type: "POST",
url: 'Helpers/CalcResult7.ashx',
data: { GU_ID: '<%=Request.QueryString["GUID"] %>' },
success: function (data) {
list1 = eval(data);
temp = parseFloat(myJSONObject.bindings[0].value);
$("#<%=ProResult7.GetSpanId %>").text(addCommas(temp));
}
});
return temp;
}
答案 0 :(得分:0)
因为ajax调用是异步的,所以在更新之前返回temp ...
答案 1 :(得分:0)
因为在从服务器返回HTTP响应之前,成功函数才会运行。
Ajax是异步的。
您要对成功功能中的数据(或您从中调用的功能)执行操作。
不要试图等待响应,然后将数据返回到调用函数。
答案 2 :(得分:0)
Ajax调用是异步的,但您可以使用CommonJS Promises/A pattern来实现您想要的效果。 jQuery提供了它自己的实现:jQuery.Deferred()
。
答案 3 :(得分:0)
正如其他人在这里提到的那样,因为ajax是异步的,所以你不能保证在return语句之前得到更新的临时变量。最好在你的成功函数中工作。但是,如果您必须等待该调用完成并返回临时变量,则可以通过添加async: false
function calc7() {
var temp = 0;
$.ajax({
type: "POST",
url: 'Helpers/CalcResult7.ashx',
data: { GU_ID: '<%=Request.QueryString["GUID"] %>' },
async: false,
success: function (data) {
list1 = eval(data);
temp = parseFloat(myJSONObject.bindings[0].value);
$("#<%=ProResult7.GetSpanId %>").text(addCommas(temp));
}
});
return temp;
}
答案 4 :(得分:0)
S.ajax / $ .post / $。get etc等,所有这些都是异步过程(这意味着,即使在完成$ .ajax之前,你也会走出循环,即使它会转到服务器端在退出循环之后)
function calc7() {
var temp = 0;
$.ajax({
type: "POST",
.............
..............
}
});
return temp;
}
因此,如果您要检查循环之后,可能没有执行以下语句(取决于数据集)。 temp = parseFloat(myJSONObject.bindings [0] .value);
因此要检查temp变量中的数据,您应该在$ .ajax中放置一个调试器/警报。例如:
function calc7() {
var temp = 0;
$.ajax({
type: "POST",
url: 'Helpers/CalcResult7.ashx',
data: { GU_ID: '<%=Request.QueryString["GUID"] %>' },
success: function (data) {
list1 = eval(data);
temp = parseFloat(myJSONObject.bindings[0].value);
alert(temp);
$("#<%=ProResult7.GetSpanId %>").text(addCommas(temp));
}
});
return temp;
}
现在你将得到temp的值