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 ответа:
Причина, по которой вы видите эту ошибку:
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", если с вами происходит то же самое. Надеюсь, это кому-то поможет.