2011-12-25 34 views
0

我试图存储返回Ajax调用的结果:VAR y值是在JavaScript中使用,但对于返回的y值结果始终为0存储Ajax请求结果到一个Javascript瓦尔

<head>  
$.ajax({ 
     url: 'test2.php', 
     success: function(data) { 
      var yValue= data; // data contains value 1; 
     } 
    }); 

    alert (yValue); 
</head> 

返回的结果总是为零或为零,当我尝试使用警告框检查数据的值时,它总是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

欢迎来到** async **的美妙世界!你不能那样做。 – SLaks 2011-12-25 17:08:59

回答

6

我试图存储返回阿贾克斯

的结果不要试图对异步性质AJAX的战斗(这是什么的缩写的第一个字母表示)。这是一场你会输的战斗。如果你想要做AJAX,你应该停止以顺序方式思考和编写代码。你应该使用事件。您订阅事件(例如success回调AJAX调用),并且仅在这些事件中使用结果。

所以你的情况,而不是试图存储结果里面的变量简单地使用回调比对结果:

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

对于答案的完整性起见(没有的东西,你应该永远做)你然而

var globalData = null; 
$.ajax({ 
    url: 'test2.php', 
    async: false, 
    success: function(data) { 
     globalData = data; 
    } 
}); 
alert(globalData); 

注意,通过这样做,你不再做AJAX:可以在async标志设置为false。该调用不是异步的。这是一个标准的同步调用,会在处理过程中阻止用户浏览器。这完全击败了AJAX的全部目的。不要这样做。

+0

我想使用返回的结果,但不知何故,当我将值推入一个JavaScript数组时,返回的数据是NULL。任何解决他的问题的方法? – user1115461 2011-12-25 17:27:53

+0

@ user1115461,它是空的是正常的。 $ .ajax方法立即返回。成功回调可以在稍后调用。解决方法是推入成功回调中的值:'success:function(data){someGlobalArray.push(data); }' – 2011-12-25 17:32:47

+0

似乎无法将数据存储到文件中,按照您的方法。返回的数据值是1,但是当您检查数组内的值时,它的空值; – user1115461 2011-12-25 18:03:18

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

'yValue'的作用域是包含函数。它不会存在于它之外。异步与否。 – 2011-12-25 17:49:23

+1

@nikc吧,我会更新这个例子 – David 2011-12-25 18:08:29