Следующая функция приводит к тому, что в Chrome и Safari переменная ответа равна нулю, но не Firefox.
function updatePage(response){ // This argument differs by browser
response = jQuery.parseJSON(response);
for(var i=0; i<response.length; i++){
// conduct magic
};
};
Ошибка:
Uncaught TypeError: Cannot read property 'length' of null
Это происходит потому, что подача jQuery.parseJSON ()все, кроме JSON string , возвращает ноль.Похоже, что Chrome и Safari автоматически анализируют JSON без явного запроса.Если я протестирую аргумент «response» перед тем, как попытаться проанализировать его с помощью jQuery, это уже объект JSON в Chrome и Safari.Тем не менее, в Firefox это по-прежнему строка.
Единственное решение, которое я нашел, чтобы справиться с этим во всех браузерах, это определить, был ли уже проанализирован «отклик», проверив его конструктор:
function updatePage(response){
if(response.constructor === String){
response = jQuery.parseJSON(response);
};
for(var i=0; i<response.length; i++){
// conduct magic
};
};
Я что-то упустил или это единственный способ справиться с этим в настоящее время?Похоже, jQuery.parseJSON обнаружит пользовательский агент и просто вернет аргумент как есть в случае Chrome / Safari.
Соответствующая информация
- Это jQuery 1.6.1
- Тип содержимого ответа с сервера: application / json
- Аргумент ответа исходит из вашего стандартного вызова jQuery AJAX:
$.ajax({
url: API_URL + queryString + '&limit=' + limit,
type: 'GET',
cache: false,
context: document.body,
success: updatePage,
error: function(err){
console.log('ERROR: ' + err);
}
});