web-dev-qa-db-ja.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"}]
15
user2314110

Ajax応答が有効かどうかを確認する必要があります。 ajaxで指定する場合:

dataType: 'json',

サーバーが200 OKを返しても、応答をJSONとして解析できない場合、jQueryはエラーイベントを発生させます。サーバーから返されたデータをチェックして、それが有効な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!');.
      }
    }        
});
20

ステータスが200 OKを示しているため、解析エラーがあります。問題はdatatype:jsonにあります。これをテストするには、行を削除すると動作するはずです。これを修正するには、datatype:textに変更します。 同様の質問については、このリンクも参照してください

8
SanTheta

Urlパラメータを確認し、読み込まれたページと同じであることを確認してください。クロスドメインのajax呼び出しを行っている可能性があります。クロスドメインのajax呼び出しを行う場合は、クロスドメインのリクエストを行うことができるdataTypeが「script」と「jsonp」のみであることに注意してください。

URLがIPアドレスであり、ページがそのIPを指すドメイン名をロードした開発環境でこの問題に遭遇しました。

0
DaveS

私は少し遅れていることを知っていますが、同じ問題に遭遇しただけで、これはGoogleのトップの検索結果の1つです。私は次のようにデータ型を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がデータを正しく送信し、アプリがAJAXを介してAPIに呼び出し、データを返します。

アプリケーションを実行するとドメインが似ていないため、AJAX呼び出しは成功関数にヒットしません。ブラウザがCross Site request。ローカルとデバッグの両方でアプリを公開すると、問題なく動作します。

これが誰かのお役に立てば幸いです。

0
dush88c