我使用$.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的新手,所以提前感谢..!
答案 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代表异步。事件的顺序是
$.get
,等待响应并在响应到来后调用第二个参数函数var y = data;
,但设置数据的响应尚未发送(功能的其余部分(setPoint
也已处理)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