2

我使用$.get来获取在 中生成的值test2.php,当我执行 an 时,alert(data)我得到了我想要的确切值,但我不知道如何存储在变量中获得的值y

   var series = this.series[0];  
   setInterval(function() {

      $.get('test2.php', function(data) {
         alert(data);
      });

      var y = data;  // NOT WORKING !
      var x = (new Date()).getTime();     

      series.addPoint([x, y], true, true);
    }, 1000);

我是 JavaScript 新手,所以提前谢谢..!

4

2 回答 2

2

Javascript 使用函数作用域,而 Ajax 是异步的,data不在 Ajax 调用后执行的代码的作用域内。将后面的var y = data;代码和后续代码放在回调之外会导致它在接收到来自服务器的响应之前执行。

在回调中添加此代码将导致它在收到来自服务器的响应并且data实际包含响应时执行。

   var series = this.series[0];  
   setInterval(function() {

      $.get('test2.php', function(data) {
         alert(data);
         var y = parseInt(data);  // NOT WORKING !
         var x = (new Date()).getTime();     

         series.addPoint([x, y], true, true);
      });

    }, 1000);
于 2013-06-11T08:48:42.307 回答
1

$.get可能是 jQuery AJAX 调用,其中 A 代表Asynchronous。事件的顺序是

  1. $.get被调用,等待响应,响应到来后调用第二个参数函数
  2. var y = data;,但尚未发送设置数据的响应(函数的其余部分(setPoint也已处理)
  3. 响应来自服务器并设置data(为时已晚)

有两种解决方法:

  • 要么将代码放入$.get第二个参数的函数中(正如 Kevin Bowersocks 建议的那样)
  • 或进行同步调用。jQuery 在这里帮不了你,我也不推荐它:浏览器冻结直到响应,如果响应丢失,页面需要重新加载。

    var xhr = new XMLHttpRequest();
    xhr.open("GET","test2.php",false); // false = synchronous call
    xhr.send(); // browser freezes until the response, let's hope not for long
    var y = xhr.response; // response is ready here for synchronous calls
    
于 2013-06-11T09:00:11.897 回答