为什么$ .getJSON和$ .ajax都会立即在IE中返回?

时间:2009-10-08 21:50:47

标签: jquery ajax internet-explorer

我正在尝试发出异步请求以从我的服务器获取一些数据。这一切在Firefox中运行良好,但在Internet Explorer中,在收到任何数据之前立即调用回调。

$.ajax({
    url: "charts.php", 
    data:   { site: site, start: toDateString(start), end: toDateString(end) },
    cache: false,
    dataType: "json",
    success:
    function(data) {

            var dataPoints = [];

            if(data.length == 0){
                $("#error").children("label").eq(0).html("There were no results for the site and range selected.");

                if($("#error").css("display") == "none"){
                    $("#error").toggle();
                }

                $("#large-loader").toggle();
                return false;

            }


            //add each pair of time/maxcalls to an array
            $.each(data, function(i, item){
                    var minute = item[0];

                    dataPoints.push({
                        label: pad(parseInt(minute / 60)) + ":" + pad((minute%60)),
                        data: [minute, item[1]]
                    });
            });

            var options = {
                xaxis : {
                    ticks : 24,
                    tickSize: 60
                    },
                legend : {
                    show: true,
                    margin: 10,
                    backgroundOpacity: .3
                    },
                grid: {
                    hoverable: true
                    }
            };


            //hide loader, show chart
            $("#large-loader").toggle();

            $("#chart-container").toggle();
            $.plot($("#chart"), [data], options);



        }
});

1 个答案:

答案 0 :(得分:0)

数组存在length属性,但对于对象则不存在。例如,在您的firebug控制台中,您可以输入:

var a={'a':'e','b':'c'};
a.length==undefined;//true

然后用数组尝试:

var a=['a', 'b','c','d'];
a.length;//4

<小时/> 在回复评论时: 您应该可以毫无问题地对空对象执行$.each。你可以保留一个计数器,例如

            var resultCount=0;

            $.each(data, function(i, item){
                            resultCount++;
                            //...

            });

           if(resultCount == 0){
                    //error
                    return false;

            }

话虽如此,我不确定这是否真的是你的问题(但要检查,因为它可能是)。您是否在IE中尝试过alert data?有时您只需继续移动警报,直到找到问题为止。