Почему $ .getJSON и $ .ajax сразу возвращаются в IE? - PullRequest
0 голосов
/ 09 октября 2009

Я пытаюсь сделать асинхронный запрос на получение данных с моего сервера. Все это прекрасно работает в 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 голосов
/ 09 октября 2009

Свойство 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;

            }

При этом я не уверен, действительно ли это ваша проблема (но проверьте, потому что это вполне может быть). Вы пробовали alert ing data в IE? Иногда вам просто нужно постоянно перемещать оповещения, пока не найдете проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...