我正在尝试进行一个简单的调用,我从$ .ajax()获取数据,并希望将其保存到一个全局变量中,我可以在调用ajax调用的函数中使用它。
为什么没有设置变量?为什么我设置的值会丢失?
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()
的输出:
in namespace
in startCall()
in finishCall()
in ajax succeeded call
in finishCall()
为什么最后一个变量设置为“in finishCall()”而不是“in ajax succeeded call”?
注意,我不是jQuery或javascript专家。
非常感谢你!
答案 0 :(得分:0)
您的成功回调功能
function GetSongInfoSucceeded(C) {
if (result != null) {
$.myNamespace.timerID = "in ajax succeeded call";
alert($.myNamespace.timerID);
} else { }
}
您有一个无效的request
变量,其中您的函数获取C
作为输入数据
答案 1 :(得分:0)
所以,当你收到数据时,功能。被称为:
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 { }
}
答案 2 :(得分:0)
这不是保存数据的问题 - 它实际上是执行顺序的问题。让我们再次检查你的代码,这次用函数的实际代码替换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在调用最后一个alert
之前不会等待$ .ajax调用成功。如果是,则值仍为in finishCall()
。
让我感到困惑的是,正如你所说,alert
显示为最后一个,而不是最后一个;使用console.log
'ajax success call'会显示最后一个。