在另一个函数中使用AJAX的Javascript
在另一个函数中使用AJAX的Javascript 在本例中,我希望通过AJAX从服务器传递一个值,而不是使用随机值放置前19个点 我在这里讲的是代码在另一个函数中使用AJAX的Javascript,javascript,jquery,ajax,highcharts,Javascript,Jquery,Ajax,Highcharts,在另一个函数中使用AJAX的Javascript 在本例中,我希望通过AJAX从服务器传递一个值,而不是使用随机值放置前19个点 我在这里讲的是代码 series: [{ name: 'Random data', data: (function () { var data = [], time = (new Date()).getTime(), i; for (i = -19; i <= 0
series: [{
name: 'Random data',
data: (function () {
var data = [],
time = (new Date()).getTime(),
i;
for (i = -19; i <= 0; i += 1) {
data.push({
x: time + i * 1000,
y: Math.random()
});
}
return data;
}())
}]
但是我试着使用它,但它似乎不起作用,如下所示:
series: [{
name: 'Random data',
data: (function () {
var data1 = [],
time = (new Date()).getTime(),
i;
$.ajax({
type: "GET",
url: "/getData",
success: function(data) {
var y1 = data.count;
for (i = -19; i <= 0; i += 1) {
data1.push({
x: time + i * 1000,
y: data.count
});
}
}
});
return data1;
}())
}]
系列:[{
名称:'随机数据',
数据:(函数(){
var data1=[],
时间=(新日期()).getTime(),
我
$.ajax({
键入:“获取”,
url:“/getData”,
成功:功能(数据){
var y1=data.count;
对于(i=-19;i首先,请参阅本参考资料,了解为什么您不能像尝试的那样从外部函数返回数据:
然后,理解您必须使用来自success
处理程序的数据,这意味着您必须将ajax调用移到数据声明之外,然后再进行操作,但您必须认识到,直到ajax调用完成后,数据才可用。您不能立即使用它y、 如果您需要知道数据何时可用,那么将数据放入数据结构,并从成功处理程序调用其他函数。就像他们说的AJAX调用是异步的=不阻塞,这意味着浏览器正在您的函数中进行AJAX调用,并立即在下一行继续,在您的情况下返回数据1
但是由于ajax调用仍在执行,因此没有更新data1
var
文件:
在您的代码中还有一些我不理解的地方,您是否尝试使用JSHint或JSLint来lint hit?。下面是我的版本,其中有一些更正:
// define var outside of function so they are not scoped
var time = (new Date()).getTime(),
data1,series;
$.ajax({
type: "GET",
url: "/getData",
success: function(data) {
// since you are using i only here just define it in the cycle
for (var i = -19; i <= 0; i += 1) {
data1.push({
x: time + i * 1000,
y: data.count
});
}
}
}).done(function() {
series = {
name: 'Random data',
data: data1
};
});
//在函数外部定义var,使其不受作用域限制
变量时间=(新日期()).getTime(),
数据1,系列;
$.ajax({
键入:“获取”,
url:“/getData”,
成功:功能(数据){
//因为你只在这里使用我,所以在循环中定义它
对于(var i=-19;i),您的ajax调用是异步的。您必须在“success”处理程序函数中完成工作。您可以制作函数(数据)
任何您想要的:函数(foo)
收集并稍后使用可能是dup的一个变体,它解释了为什么异步Ajax调用不能直接返回数据,必须使用成功处理程序(或promise.then()
或promise.done()
)。
// define var outside of function so they are not scoped
var time = (new Date()).getTime(),
data1,series;
$.ajax({
type: "GET",
url: "/getData",
success: function(data) {
// since you are using i only here just define it in the cycle
for (var i = -19; i <= 0; i += 1) {
data1.push({
x: time + i * 1000,
y: data.count
});
}
}
}).done(function() {
series = {
name: 'Random data',
data: data1
};
});