flot graph没有显示数据,数据没有完全加载?

时间:2013-10-28 01:01:03

标签: javascript flot

下面注释alert("inside function: " +data);时,数据行不显示在图表上,但当其取消注释并且用户解除警报时,图表将填充数据集。
是否可以在调用时间$.plot时完全加载数据?

[01:05:21.158] TypeError: myfile is undefined @ http://localhost:8080/App/js/App.js:7

脚本..

$(function() {

    var plotarea = $("#placeholder"),
        myfile = Script_JSON.getData("myfile"),
        anotherfile = Script_JSON.getData("anotherfile");

    $.plot(plotarea, [myfile.data, anotherfile.data]);
}); 

var Script_JSON = {

    getData: function(component) {

        var data;

        $.getJSON("data/" + component + ".json", function(json) {

            data=json;
        });

        //alert("inside function: " +data);

        return data;
    }
};

2 个答案:

答案 0 :(得分:3)

对此有很多重复的问题,但没有一个有非常直接的答案。

AJAX请求,例如getJSON,是异步的。当你进行调用时,它立即返回,而你提供的成功函数直到一段时间后才被调用。这可以是从几毫秒到几秒的任何地方,具体取决于请求。

所以在下一行调用情节,期望结果已经到来,不会起作用。你需要在成功回调中进行策划。

在您的情况下,如果您有两个单独的负载,则需要检查每个负载是否已经到达另一个负载的结果。如果是这样,你可以绘制;否则你需要返回并让其他回调处理它。

答案 1 :(得分:0)

使用Java Servlet从文件中读取json数据并使用AJAX发送到javascript ..

var App_AJAX = {
    getData: function(){

        var xmlhttp = new XMLHttpRequest();
        xmlhttp.onreadystatechange = callback;
        xmlhttp.open("GET", "Servlet, true);
        xmlhttp.send(null);

        function callback() {

            if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {

                $("#body").append('<div id="content"><div class="demo-container"><div id="placeholder" class="demo-placeholder"></div></div></div>');   

                var datasets = JSON.parse(xmlhttp.responseText);                
            } else {
                // have not recieved data yet
            }
        }
    }
};