在另一个函数中使用AJAX的Javascript

在另一个函数中使用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

在另一个函数中使用AJAX的Javascript

在本例中,我希望通过AJAX从服务器传递一个值,而不是使用随机值放置前19个点

我在这里讲的是代码

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