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.