Ajax-вызов вызывает ошибку, но возвращает 200 ok
$.ajax({
url: 'http://intern-dev01:50231/api/language',
type: 'GET',
dataType: 'json',
success: function() {
console.log('It Works!');
},
error: function (request,status, error) {
console.log(error);
alert(status);
}
});
Почему этот вызов ajax не работает? если я звоню в браузере, он отлично работает:/.
Это то, что возвращает fiddler:
HTTP/1.1 200 OK
Content-Length: 122
Content-Type: application/json; charset=utf-8
Server: Microsoft-HTTPAPI/2.0
Date: Fri, 26 Apr 2013 06:56:40 GMT
[{"LanguageId":1,"LanguageName":"Dansk"},{"LanguageId":2,"LanguageName":"Tysk"},{"LanguageId":3,"LanguageName":"Engelsk"}]
Ответы
Ответ 1
Вы должны проверить ответ ajax, если он действителен или нет. Когда вы укажете в ajax:
dataType: 'json',
jQuery будет запускать событие ошибки, если ответ не может быть проанализирован как JSON, даже если сервер возвращает 200 OK. Проверьте данные, возвращенные с сервера, и убедитесь, что они действительны. JSON (попробуйте службу JSONLint).
Если возвращаемые данные не являются JSON или у него есть синтаксические ошибки, исправьте их в коде на стороне сервера. Вы можете просто вернуть {} со стороны сервера script.
Также попробуйте это.
$.ajax({
url: 'http://intern-dev01:50231/api/language',
type: 'GET',
cache: false,
complete: function (xhr, status) {
if (status === 'error' || !xhr.responseText) {
console.log(error);
alert(status);
}
else {
console.log('It Works!');.
}
}
});
Ответ 2
Ошибка анализа, так как статус показывает 200 OK. Проблема заключается в типе данных: json. Чтобы проверить это, удалите строку, и она должна работать. Чтобы исправить это, вы можете изменить его на тип данных: текст. См. также эту ссылку для аналогичного вопроса
Ответ 3
Я знаю, что немного опоздал, но я столкнулся с одной проблемой, и это один из лучших результатов поиска в Google. Мне удалось исправить это, переместив тип данных выше url следующим образом:
$.ajax({
type: 'GET',
dataType: 'json',
url: 'http://intern-dev01:50231/api/language',
success: function() {
console.log('It Works!');
},
error: function (request,status, error) {
console.log(error);
alert(status);
}
});
Ответ 4
Если вы тестируете локально с помощью другого приложения для веб-приложений и веб-приложений, отлаживайте приложение и проверяйте API, отправляя данные правильно, и приложения обращаются к API через AJAX и возвращают данные.
поскольку домены не похожи при запуске приложения. AJAX-вызов не попадает в функцию успеха. потому что браузер предотвращает Cross Site request
. Если вы публикуете оба приложения в локальном и отладочном, это работает нормально.
надеюсь, что это будет полезно кому-то.
Ответ 5
Проверьте параметр url и убедитесь, что он совпадает с загруженной страницей. Возможно, вы выполняете междоменный вызов ajax. Если вы хотите сделать междоменный вызов ajax, обратите внимание, что единственными типами данных, разрешенными для междоменных запросов, являются "script" и "jsonp".
Включите эту проблему в среде dev, где URL-адрес был IP-адресом, а страница загрузила доменное имя, указывающее на этот ip.