2012-07-13 7 views
6

私は404を処理するためにjquery ajaxステータスコード関数を持っています...もう一つのスタックオーバーフローの答えは、成功メソッドでthis.urlがリクエストのURLを与えると述べています...しかし、これはそうではないようです私のstatusCodeハンドラのために。何か案は?リクエストのURLを取得する方法については、ドキュメントではわかりません。JQueryのstatusCode 404 - jqXhrのURLを取得するには?

;(function($) { 
    var defaultSettings = { 
    // ... other plugin specific settings 
    ajaxOptions: 
    { 
        cache:false, 
        context:$(this), 
        statusCode: { 
         404:function(xhr) { 

         // this line... this.url is always undefined (so is xhr.url) 
          $('#body').append('<div class="errordisplay">Content not found' + (this.url?': ' + this.url:'') + '</div>'); 

        // ... do other stuff 

          return false; 

         } 
        } 
      } 
} 
+0

'context'オプションで何かを' $ .ajax() 'に渡していますか? –

+2

['this.url'はうまくいくはずです](http://jsfiddle.net/jamesallardice/f3XTn/)。より多くのコードを投稿する必要があるかもしれません。 –

+0

このajaxOptionオブジェクトは、カスタムjqueryプラグインのデフォルトのオプションですので、私は "context:$(this)"を持っています...詳細は – Nathan

答えて

8

AJAXのイベントハンドラのデフォルトのコンテキスト(つまり、オブジェクトがthisにバインド

私のAjaxオプションオブジェクトは、次のように大まかに見えますが(この質問に関係のないコードをトリミングする際ブレースをオフに見逃している場合があります) $.ajaxSettingsと引数が$.ajax()に渡されているため、実際にはurlというプロパティが公開されています。

ただし、あなたの場合はをcontextオプションに渡して、そのデフォルトのコンテキストを上書きしています。さらに、ajaxOptionsでこれを行うと、そのオブジェクトを現在のURLで拡張することは容易ではないことを意味します。

data()などを使用して、プラグインがAJAXコールの前に強化している要素にURLを関連付けることをお勧めします。あなたは次のコードで送信する前に要求&設定オブジェクトを変更することができ

30

$.ajaxSetup({ 
    beforeSend: function(jqXHR, settings) { 
     jqXHR.url = settings.url; 
    } 
}); 

次にstatusCodeコールバックでxhr.urlにアクセスします。それは動作するはずです。

+0

私のために働き、デバッグ目的のためにURLを記録することができます。 –

+0

処理中にリダイレクトされた場合 – Elaman

+0

@Elamanブラウザはリダイレクトを透過的に処理するため、301/302の応答で動作するはずです。 – janlay

関連する問題