8

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

私のajaxオプションオブジェクトはおおよそこのように見えます(この質問に関係のないコードをトリミングするときに中括弧を見逃している可能性があります)

;(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;

                        }
                    }
            }
}
4

2 に答える 2

32

次のコードを使用して送信する前に、リクエストと設定のオブジェクトを変更できます。

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

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

于 2012-08-16T03:37:39.083 に答える
9

AJAXイベントハンドラー(つまり、ハンドラーでバインドされたオブジェクト)のデフォルトのコンテキストは、プロパティと$ .ajax()に渡される引数が混在しているためthis、実際にプロパティを公開します。url$.ajaxSettings

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

data()などを使用して、AJAX呼び出しの前にプラグインが拡張している要素にURLを関連付けることをお勧めします。

于 2012-07-13T09:19:30.193 に答える