将Ajax请求结果存储到Javascript Var中

时间:2011-12-25 17:05:46

标签: jquery

我正在尝试将返回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]);

任何人都可以提供帮助吗?

2 个答案:

答案 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添加到a​​jax调用:

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);
}