2013-04-26 7 views
11
$.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呼び出しが機能しないのですか?ブラウザで呼び出すとうまくいく:/。それが有効であるかどうAjaxコールはエラーイベントを発生させますが、エラーは200に戻ります。

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

あなたは、AJAXの応答をチェックする必要があります。

これはシオマネキリターンは何です。あなたは、Ajaxに指定する場合:

dataType: 'json', 

を応答はJSONとして解析できない場合はjQueryのは、サーバーが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!');. 
     } 
    }   
}); 
+0

私はjsonpを使用する場合、私はparseErrorを取得 – user2314110

+1

@ user2314110ちょうどdataTypeを削除してください: 'json'としてみてください。私の編集の回答を参照してください。 –

+0

まだアラートエラーが発生しています – user2314110

5

ステータスに200 OKと表示されるため、解析エラーが発生します。問題はデータ型のjsonにあります。これをテストするには、行を削除し、それが動作するはずです。これを修正するには、データ型:テキストに変更することができます。 See this link too for similar question

+0

なぜ私のSymfony Dynamic Formsがエラーイベントをトリガーしたのかは、ajaxリクエストが私に更新されたフォームのhtmlを返すからです! –

+0

私はjsonの代わりにプレーンテキストを返していました。 –

0

私は少し遅れていることは知っていますが、私はちょうど同じ問題に遭遇しました。これはGoogleでのトップ検索結果の1つです。あなたが別のWebアプリケーションとWeb APIアプリケーションをローカルでテストされ、その後、あなたのアプリケーションとテストAPIデバッグが正しくデータを送信し、アプリがAPIを呼び出す場合

$.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); 
    } 
}); 
+3

これは基本的にキー値のペアなので、あらかじめ構造化されている方法とは関係ありません。私は、このリクエストオブジェクトを構築するものは、dataTypeキーが他のキーの前か後にあるかどうかを調べるものではないと思います。単にそれを構築するだけです。ここの目標は本当の原因を見つけることです。 –

0

:私はこのようなURLの上のデータ型を移動して、それを修正するために管理しましたAJAX経由でデータを返します。

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

これは役に立ったと思っています。

0

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

この問題は、URLがIPアドレスであり、ページがそのIPを指し示すドメイン名をロードしたdev環境で実行されます。

関連する問題