it-roy-ru.com

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 не работает? если я звоню в браузере, он работает нормально: /.

Вот что возвращает скрипач:

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"}]
12
user2314110

Вы должны проверить ответ Ajax, если он действителен или нет. Когда вы указываете в ajax:

dataType: 'json',

jQuery вызовет событие ошибки, если ответ не может быть проанализирован как JSON, даже если сервер вернет 200 OK. Проверьте данные, возвращенные с сервера, и убедитесь, что это действительный JSON (попробуйте сервис JSONLint).

Если возвращаемые данные не являются JSON или имеют синтаксические ошибки, исправьте их в коде на стороне сервера. Вы можете просто вернуть {} из сценария на стороне сервера.

Также попробуйте это.

$.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!');.
      }
    }        
});
14
Bharat Chodvadiya

Произошла ошибка синтаксического анализа, так как статус показывает 200 OK. Проблема заключается в типе данных: json. Чтобы проверить это, удалите строку, и она должна работать. Чтобы это исправить, вы можете изменить его на тип данных: текст. Смотрите эту ссылку тоже для аналогичного вопроса

7
SanTheta

Проверьте параметр url и убедитесь, что он совпадает с загруженной страницей. Возможно, вы делаете междоменный вызов ajax. Если вы хотите сделать междоменный вызов ajax, обратите внимание, что единственными dataTypes, разрешенными для выполнения междоменных запросов, являются «script» и «jsonp».

Эта проблема возникла в среде разработчиков, где URL-адрес представлял собой IP-адрес, а на странице было загружено имя домена, указывающее на этот IP-адрес.

0
DaveS

Я знаю, что немного опоздал, но я столкнулся с той же проблемой, и это один из лучших результатов поиска в 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);
    }
});
0
Senju

Если вы проводите локальное тестирование с другим веб-приложением и приложениями веб-API, отлаживайте приложение и тестируйте API-интерфейс, отправляйте данные правильно и вызовы приложения к API через AJAX и возвращайте данные. 

так как домены не похожи при вызове приложения AJAX, это не влияет на функцию успеха. потому что браузер предотвращает Cross Site request. Если вы публикуете приложение как локальное, так и отладочное, оно работает нормально. 

надеюсь, это будет полезно кому-то.

0
dush88c