Javascript高图传递变量

时间:2013-06-11 08:46:06

标签: javascript jquery variables

我使用$.get获取test2.php中生成的值,当我执行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的新手,所以提前感谢..!

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:1)

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

    调用
  1. $.get,等待响应并在响应到来后调用第二个参数函数
  2. var y = data;,但设置数据的响应尚未发送(功能的其余部分(setPoint也已处理)
  3. 响应来自服务器并设置data(太晚了)
  4. 有两种解决方法:

    • 将代码放入第二个参数的$.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