jQuery无法在.ajax()调用后保留数据
我正在尝试执行一个简单的调用,从$.ajax()返回数据,并希望将其保存到一个全局变量中,我可以在调用ajax调用的函数中使用该变量 为什么不设置变量?为什么我设置的值丢失了jQuery无法在.ajax()调用后保留数据,jquery,ajax,function,variables,Jquery,Ajax,Function,Variables,我正在尝试执行一个简单的调用,从$.ajax()返回数据,并希望将其保存到一个全局变量中,我可以在调用ajax调用的函数中使用该变量 为什么不设置变量?为什么我设置的值丢失了 jQuery.support.cors = true; $.myNamespace = { timerID: "in namespace" }; $(document).ready(function () { $("#btnSkip").click(function () { alert
jQuery.support.cors = true;
$.myNamespace = {
timerID: "in namespace"
};
$(document).ready(function () {
$("#btnSkip").click(function () {
alert($.myNamespace.timerID);
startCall();
});
function startCall() {
$.myNamespace.timerID = "in startCall()";
alert($.myNamespace.timerID);
finishCall();
alert($.myNamespace.timerID);
}
function finishCall() {
$.myNamespace.timerID = "in finishCall()";
alert($.myNamespace.timerID);
$.ajax({
type: "GET",
url: getUrl,
processData: false,
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (data) {
$.myNamespace.timerID = "in ajax succeeded call";
alert($.myNamespace.timerID);
},
error: function (xhr, status, error) {
GetSongInfoFailed(xhr, status, error);
}
});
}
function GetSongInfoFailed(xhr, status, error) {
alert('Service call failed: ' + xhr + ' ' + status + ' ' + error);
}
});
上述代码中的alert()
s的输出:
成功
非常感谢你 您的成功回调函数
function GetSongInfoSucceeded(C) {
if (result != null) {
$.myNamespace.timerID = "in ajax succeeded call";
alert($.myNamespace.timerID);
} else { }
}
您有一个无效的
请求
变量,当您的函数将C
作为输入数据时因此,当您收到数据时,funct。被称为:
GetSongInfoSucceeded(data);
如果我们查看您的函数定义:
function GetSongInfoSucceeded(C) {
然后我们看到,一个“数据”的输入现在将在名为C
的var中。这就是为什么调用result
不会给出任何答案的原因:
if (result != null) {
$.myNamespace.timerID = "in ajax succeeded call";
alert($.myNamespace.timerID);
} else { }
正确的方法是这样的:
function GetSongInfoSucceeded(result) {
if (result != null) {
$.myNamespace.timerID = "in ajax succeeded call";
alert($.myNamespace.timerID);
} else { }
}
这不是保存数据的问题,而是执行顺序的问题。让我们再次检查代码,这次将finishCall()调用替换为函数的实际代码:
alert($.myNamespace.timerID);
$.myNamespace.timerID = "in finishCall()";
alert($.myNamespace.timerID);
$.ajax({..., ..., function() {
$.myNamespace.timerID = "in ajax succeeded call()";
alert($.myNamespace.timerID);
});
alert($.myNamespace.timerID);
请看,JS不会等到$.ajax调用成功后才调用最后一个警报。当它这样做时,finishCall()中的值仍然是
让我困惑的是,正如你所说,为什么这个警报显示在最后一个,而不是最后一个之前;使用console.log
时,“ajax成功调用”实际上是最后一次显示。停止使用警报进行调试,改用console.log(消息)。您可以在firefox中使用firebug,也可以在safari或chrome中使用开发工具。如果你这样做,你会更快乐的。谢谢你,我会努力的。这应该是一个5分钟的项目。结果就是因为这个被关了好几个小时。是的,这不是问题所在。实际上,我也直接在成功中分配变量,即使这样也不起作用。我也把它改成了“结果”。仍然没有。删除并修改了代码。还是同一个问题。也许现在更清楚了。。。谢谢你的帮助。是的,你说得对。这就是我所想的问题所在。事件序列和异步调用。但是,我需要将这些函数彼此分开,因为它们会从不同的位置重复调用。我也很困惑。