0

このコードを1.7で実行すると、アラートが表示されますが、1.8では表示されません。

$.when(
$.ajax({
    url: "whatever",
    dataType: "json",
    beforeSend: function(jqXHR, settings) {
        return false;
    }
})).done(function(a1) {
    alert("this appears in 1.7 but not in 1.8!");
});​

jQueryのドキュメント、1.8リリースノート、またはこの問題に言及しているjQueryバグトラッカーには何も見つかりませんでした。どの動作が正しいのか、誰かがバグチケットまたはGithubコミットへのリンクを提供できるのかどうか疑問に思っています。

この問題のフィドルは次のとおりです。

http://jsfiddle.net/zJddg/

4

2 に答える 2

2

jQueryのドキュメントから:

beforeSend 関数で false を返すと、リクエストがキャンセルされます。

1.8 で発生している現在の動作は予想される動作です。1.7 でリクエストがキャンセルされなかった場合、それはバグになります。

http://api.jquery.com/jQuery.ajax/

ただし、この「バグ」を修正することを指すリリースのいずれにもリンクされているバグは見当たりません。

于 2012-12-19T20:43:27.203 に答える
2

アラートは表示されません。http://api.jquery.com/jQuery.ajax/言います:

特に、オブジェクトで .abort() を呼び出すと、完了する前にリクエストが停止します。

そしてコードで:

    // Allow custom headers/mimetypes and early abort
    if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {
            // Abort if not done already and return
            return jqXHR.abort();

    }

これは、バグ #8193とおそらくバグ #10944への対応によるものだと思います。

于 2012-12-19T20:48:57.247 に答える