2012-03-20 15 views
1

絶対URLを指定して外部Webサービスを呼び出すと、HTTPエラー(404、500、504など)をキャッチすることは可能ですか? (http://api.geonames.org/findNearbyPostalCodesとしてURL値を持っている$.ajaxコールのurl:属性を設定するように。jQuery ajax - 絶対URLとエラー処理

今私は放火犯は、それらをキャッチし、コンソールにそれを見せているもののすべてのエラーを受け取ることができないんです。

誰かが助けることができます?

はここに私のコードです。

$.ajax({ 
    type: 'GET', 
    url: "http://api.geonames.org/findNearbyPostalCodes", 
    data: '{"lat":47,"lng":"9","username":"demo"}', 
    dataType: 'json', 
    cache:false, 
    async:false, 
    statusCode:{ 
     404: function(){ 
      alert('Page not found'); 
     }, 
     500: function(){ 
      alert('Page not found'); 
     }, 
     504: function(){ 
      alert('Unknown host'); 
     } 
    }, 
    success: function(data){ 
    alert(data); 
     } 
       error: function (xhr, exception, thrownError) 
       { 
        alert(xhr.status); 
       } 
}); 
+1

エラーブロックからの警告が実行されていますか? –

+1

成功コールバック – bevacqua

+0

がエラーコールバックまたは不正なコピー/ペーストの前にカンマがないと、カンマが不足していますか? – soju

答えて

2

いいえ、それはクロスドメイン(外部)のみクライアント側のコードを使用して要求では不可能である。これは、クロスドメインリクエスト理由JSONPに依存しています - つまり、外部ソースからコードを読み込むスクリプトタグを注入します。残念ながら、<script>要素にはonerrorというイベントはありません。

同じドメイン要求のエラーは、通常はXMLHttpRequestを使用します。これは、ステータスコードや応答ヘッダーなどの有用な情報を多く返すためです。

ローカルサーバーをプロキシとして使用することをお勧めします。

+0

JSONPの使用中にエラーハンドラを使用できない場合がありますか? –

+0

@david - はいJSONPリクエストのエラーハンドラを使用することはできません。 – gilly3

0

絶対URLを使用するとドメインがページのドメイン(ドメイン間の要求)と異なる場合、ajax呼び出しを正常に実行する唯一の方法は、JSONPを使用してajaxライブラリを使用することです<script>は、同じドメイン要求に使用されるより典型的なXMLHttpRequestではなく、クロスドメイン要求のタグです。

クロスドメイン<script>タグの読み込みからステータスコードを傍受することはできません。

+0

返信いただきありがとうございます。 Firebugコンソールに適切なエラーがありますか?私はそれらをつかんで、アプリケーションにアラートとして表示する方法はありますか? –

+0

@DavidR - 私の知るところではありません – jfriend00

0

状況コードを確認することはできません(api.geonames.orgからのリクエストをしていないと仮定して)。

要求がクロスドメインの場合はjQueryのは、常にステータスとして「0」を返します:

$.ajax({ 
    type: 'GET', 
    url: 'http://someotherdomain.com/api/query', 
    dataType: 'json', 
    data: '{"first": 1, "second": 2}', 
    complete: function(response) { // the 'response' object has the status code 
     if (response.status == '200') { 
      // do something on success 
     } else if (response.status == '0') { 
      alert('Your request is cross-domain'); 
     } 
    } 
}); 

要求が同じドメイン内にあることが発生した場合、あなたはその有効なステータスコードを取得します(の属性はsuccessまたはfailureのコールバックが実行された後に実行されます)。

+0

ありがとうジョー! Firebugコンソールの適切なエラー?私はそれらをつかんで、アプリケーションに警告として表示する方法はありますか? –

+0

@DavidRはい、Firebugのステータスコードは、 AJAXを介してプログラム的に受け取ることができます(いくつかの例は、簡単なGoogle検索を行うことによって示されています)。 – JoeLinux

+0

回避策としては、JSONPを使用していますが、これにはいくつかの制限があります(@ gilly3に記載されています)。私は、ローカル側のドメイン上のサーバー側からアクセスして、AJAXを使用して結果をクライアント側に正しく引き出すことができます。 – JoeLinux