Javascript jquery函数中var的作用域?
可能重复:Javascript jquery函数中var的作用域?,javascript,jquery,ajax,Javascript,Jquery,Ajax,可能重复: 为什么我的变量“temp”在ajax之后是0 function calc7() { var temp = 0; $.ajax({ type: "POST", url: 'Helpers/CalcResult7.ashx', data: { GU_ID: '<%=Request.QueryString["GUID"] %>' },
为什么我的变量“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;
}
函数calc7(){
var-temp=0;
$.ajax({
类型:“POST”,
url:'Helpers/CalcResult7.ashx',
数据:{GU_ID:''},
成功:功能(数据){
列表1=评估(数据);
temp=parseFloat(myJSONObject.bindings[0].value);
$(“#”)文本(addCommas(temp));
}
});
返回温度;
}
因为ajax调用是异步的,所以在更新之前会返回temp…因为只有从服务器返回HTTP响应,success函数才会运行
Ajax是异步的
对success函数(或从它调用的函数)中的数据执行您想要执行的操作
不要试图等待响应,然后将数据返回到调用函数。Ajax调用是异步的,但您可以使用它来实现所需的功能。jQuery提供了它自己的实现:。正如其他人在这里提到的,因为ajax是异步的,所以不能保证在返回语句之前获得更新的temp变量。最好在你的成功职能范围内工作。但是,如果您必须等待调用完成并返回temp变量,则可以通过添加
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;
}
函数calc7(){
var-temp=0;
$.ajax({
类型:“POST”,
url:'Helpers/CalcResult7.ashx',
数据:{GU_ID:''},
async:false,
成功:功能(数据){
列表1=评估(数据);
temp=parseFloat(myJSONObject.bindings[0].value);
$(“#”)文本(addCommas(temp));
}
});
返回温度;
}
S.ajax/$.post/$.get等,所有这些都是异步过程(这意味着,即使在$.ajax完成之前,您也将退出循环,即使退出循环后它将进入服务器端)
因此,在循环结束后,如果要检查,则可能没有执行以下语句(取决于数据集)。
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;
}
函数calc7(){
var-temp=0;
$.ajax({
类型:“POST”,
url:'Helpers/CalcResult7.ashx',
数据:{GU_ID:''},
成功:功能(数据){
列表1=评估(数据);
temp=parseFloat(myJSONObject.bindings[0].value);
警报(临时);
$(“#”)文本(addCommas(temp));
}
});
返回温度;
}
现在,您将获得temp的值,非常确定有一个选项可以强制调用同步,然后它将按预期工作。。。。但可能并不像预期的那样。为什么要询问变量的范围?这没什么问题-变量的值不是这样。检查我的回答,可能会有帮助
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;
}