JSON-запрос, добавленный с помощью [object%20Object] в jQuery


Я пытаюсь получить пользовательский канал JSON, который я написал с помощью jQuery, используя метод getJSON. По неизвестной причине URL-адрес, похоже, был удален из конца и заменен на [object%20Object], что привело к возникновению ошибки 404.

Вот jQuery, который я использую:

var fetchData = function() {

    if (Modernizr.localstorage) {

        var api_location = "http://weatherapp.dev/cache_gen.php";
        var user_location = "PL4";
        var date = new Date();

        console.log(api_location + '?location=' + user_location);

        jQuery.getJSON({
            type: "GET",
            url: api_location + '?location=' + user_location,
            dataType: "json",
            success: function(jsonData) {
                console.log(jsonData);
            }
        });

    } else {
        alert('Your browser is not yet supported.  Please upgrade to either Google Chrome or Safari.');
    }
}

fetchData();

Из журнала консоли я вижу, что строка URL вычисляется правильно: http://weatherapp.dev/cache_gen.php?location=PL4

Однако вторая строка в консоли: Failed to load resource: the server responded with a status of 404 (Not Found).

Может ли кто-нибудь указать мне направо направление с этим?

Обновление 19/01/2013 23:15

Ну, я только что преобразовал так, что это идеально подходит для документов, использующих $.ajax. Я также добавил событие fail и записал все данные, которые ему передаются.

var fetchData = function() {

    if (Modernizr.localstorage) {

        var api_location = "http://weatherapp.dev/cache_gen.php";
        var user_location = "PL4";
        var date = new Date();

        var url = api_location + '?location=' + user_location;

        console.log(url);

        jQuery.ajax({
            type: "GET",
            url: api_location + '?location=' + user_location,
            dataType: "json",
            success: function(jsonData) {

                console.log(jsonData);
            },
            error: function( jqXHR, textStatus, errorThrown ) {
                console.log('textStatus: ' + textStatus );
                console.log('errorThrown: ' + errorThrown );
                console.log('jqXHR' + jqXHR);
            }
        });

    } else {
        alert('Your browser is not yet supported.  Please upgrade to either Google Chrome or Safari.');
    }
}

fetchData();

После этого моя консоль выдает мне следующую информацию:

http://weatherapp.dev/cache_gen.php?location=PL4
download_api.js:44textStatus: parsererror
download_api.js:45errorThrown: SyntaxError: JSON Parse error: Unable to parse JSON string
download_api.js:46jqXHR[object Object]

Я гарантировал, что заголовки для канала JSON являются текущими, и канал определенно обслуживает действительный JSON (он эффективно кэширует сторонний канал обслуживания, чтобы сэкономить затраты на прикладной программный интерфейс).

3 5

3 ответа:

Причина, по которой вы видите эту ошибку:

http://weatherapp.dev/cache_gen.php?location=PL4
download_api.js:44textStatus: parsererror
download_api.js:45errorThrown: SyntaxError: JSON Parse error: Unable to parse JSON string
download_api.js:46jqXHR[object Object]

Это потому, что ваш JSON недействителен. Даже если ответ приходит с сервера правильно, если ваш тип данных 'json' и возвращаемый ответ не имеет правильного формата JSON, jQuery выполнит параметр функции error.

Http://jsonlint.com - это действительно быстрый и простой способ проверить правильность вашей строки JSON.

Проверьте фактическое использование функции:

Http://api.jquery.com/jQuery.getJSON/

Вы не можете передать параметр object в $.getJSON как с $.ajax, Ваш код должен выглядеть так:

    jQuery.getJSON('api_location + '?location=' + user_location)
         .done(function() {
            //success here
         })
         .fail(function() {
           //fail here
         });

Чтобы, возможно, сделать это немного яснее, $.getJSON - это просто "функция-оболочка", которая в конечном итоге вызывает $.ajax с {type:'get',dataType:'JSON'}. Вы можете увидеть это в ссылке, которую я предоставил выше.

Сегодня я столкнулся с той же проблемой. В моем случае я присваивал объект JSON переменной с именем 'location', которая является зарезервированным словом вJavaScript под Windows и, по-видимому, является сокращением для windows.место! Таким образом, браузер перенаправляется на текущий URL-адрес с добавлением к нему [object%20Object]. Просто используйте имя переменной, отличное от "location", если с вами происходит то же самое. Надеюсь, это кому-то поможет.