JavaScript z AJAX w innej funkcji

http://jsfiddle.net/gh/HGET/JQUERY/1.9.1/Highslide-software/highcharts.com/tree/master/samples/highcharts/demo/dynamic-update/

Z tego przykładu, zamiast umieścić pierwsze 19 punktów z losowymi wartościami, chcę przejść wartość z mojego serwera przez AJAX.

I mówię o kodzie tutaj.

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

A ponieważ klucz series jest również data Nie mam pojęcia, jak będę dostać data z AJAX GET połączenie.

AJAX zadzwoń, że chcę użyć:

$.ajax({
    type: "GET",
    url: "/getData",
    success: function(data) {
        var y1 = data.count;
        series.addPoint([x, y1], true, true);
    }
});

Ale starałem się z tego używać, ale wydaje się, że nie działa, podobnie jak:

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

Daj mi znać, jak GET dla highchart {x1}}

0
user2671513 14 sierpień 2014, 02:05

2 odpowiedzi

Najlepsza odpowiedź

Po pierwsze Zobacz to odniesienie, dlaczego nie można zwrócić danych z funkcji zewnętrznej, jakbyś próbował:

Jak zwrócić odpowiedź z wywołania asynchronicznego?

Następnie, zrozumienie, że będziesz musiał użyć danych z obsługi success, oznacza to, że będziesz musiał przenieść połączenie AJAX poza deklaracją danych i zrób to potem, ale będziesz musiał rozpoznać, że dane nie będzie dostępny do chwilowego później, gdy wykończenia AJAX Call. Nie możesz go natychmiast użyć. Jeśli chcesz wiedzieć, kiedy dane są dostępne, a następnie umieść dane do struktury danych i zadzwoń do innej funkcji z obsługi sukcesu.

0
Community 23 maj 2017, 10:33

Jak powiedziano im, że połączenie Ajax jest async = nie blokowanie, oznacza to, że przeglądarka wykonuje połączenie AJAX w swojej funkcji i natychmiast trafia na następny wiersz w swoim przypadku {x1}}, ale data1} nie jest aktualizowany, ponieważ połączenie AJAX jest nadal wykonywane.

Dokumentacja: http://api.jquery.com/deferred.done/

Istnieją również rzeczy, których nie rozumiem w swoim kodzie, czy próbowałeś uciszyć uderzeniem JStint lub JSlint?, Oto moja wersja z pewnymi poprawkami:

// 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
    };
});
0
mtt 13 sierpień 2014, 22:55