我正在尝试将返回ajax调用的结果存储为:var yValue可在javascript中使用,但返回yValue的结果始终为0.
<head>
$.ajax({
url: 'test2.php',
success: function(data) {
var yValue= data; // data contains value 1;
}
});
alert (yValue);
</head>
返回的结果始终为零或null,当我尝试使用警告框检查数据的值时,它始终为1.
即使我使用数据作为结果存储到我创建的数组“dynamicdata”中,它也会返回值0或NULL:
var globalData = null;
$.ajax({
url: 'test2.php',
async: false,
success: function(data) {
globalData = data;
}
});
var j=j+1;
var CurrentDate1 = new Date((new Date()).getTime())
var hours=CurrentDate1.getHours()
var minutes=CurrentDate1.getMinutes()
var seconds=CurrentDate1.getSeconds()
if (minutes<=9) minutes="0"+minutes;
if (seconds<=9) seconds="0"+seconds;
var timer=hours+":"+minutes+":"+seconds+"";
// remove the first element
dynamicdata.splice(0, 1);
// add a new elemez
dynamicdata.push([timer, globalData]);
任何人都可以提供帮助吗?
答案 0 :(得分:6)
我正在尝试存储返回ajax的结果
不要试图对抗AJAX的异步性质(这是首字母缩略词的第一个字母代表)。这场战斗将会失败。如果你想做AJAX,你应该停止思考并以顺序方式编写代码。你应该使用事件。您订阅了事件(例如AJAX调用的success
回调),并且只在这些事件中使用结果。
因此,在您的情况下,不要尝试将结果存储在变量中,只需在回调中使用这些结果:
$.ajax({
url: 'test2.php',
success: function(data) {
// Here and only here you can hope to reliably use the results
// of an AJAX call
alert(data);
}
});
为了答案的完整性(不是你应该做的事情),你可以将async
标志设置为false
:
var globalData = null;
$.ajax({
url: 'test2.php',
async: false,
success: function(data) {
globalData = data;
}
});
alert(globalData);
请注意,通过这样做,您不再使用AJAX。该调用不是异步的。这是一个标准的同步调用,它将在处理过程中阻止用户浏览器。这完全违背了AJAX的全部目的。不要这样做。
答案 1 :(得分:1)
您可以将ascync: false
添加到ajax调用:
var yValue;
$.ajax({
url: 'test2.php',
success: function(data) {
yValue = data; // data contains value 1;
},
async: false
});
alert(yValue);
但不建议这样做。您也可以在JavaScript中了解异步调用,您将使用它很多。以下是如果您对嵌套函数感到不舒服时如何组织代码的示例:
$.ajax({
url: 'test2.php',
success: onReady
});
function onReady(data) {
// this is called when the ajax call is completed.
alert(data);
}