end0tknr's kipple - 新web写経開発

http://d.hatena.ne.jp/end0tknr/ から移転しました

jQuery.ajax()のsuccess時に返されるXMLHttpRequestのユースケースって?

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

jQuery.ajax()は非同期のhttp request(GET PUT)を行う関数で、ver.1.5でsuccess時のcallback関数に XMLHttpRequestが追加されています。この為、$.ajax()は次のように書くことができます。

function ajax_download(file_name){
    $.ajax({
        type: "GET",
        async: true,
        cache: false,
        url: file_name,
        //data: {key_a:val_a, key_b:val_b},
        success: function(data, text_status, xhr){
            //text_status = success
            //xhr = XMLHttpRequest
            alert(' text_status='+text_status +
                  ' xhr.status='+xhr.status +
                  ' xhr.statusText='+xhr.statusText);
        },
        error: function(xhr, text_status, err_thrown){
            //xhr = XMLHttpRequest
            //text_status = {timeout, error, abort, parsererror}
            //err_thrown =  例)Internal Server Error
        }
    });
}

最初はリダイレクトのレスポンスが返ってきた時にXMLHttpRequestのgetResponseHeader()等を使ってリダイレクト先を再取得する必要があると思っていました... しかし、サーバ側で「200 OK」「304 Not Modified」「302 Found(redirect)」を返しても、success callbackは「text_status=success , xhr.status=200 , xhr.statusText=OK」を受け取っています。


jQuery.ajax()のsuccess時に返されるXMLHttpRequestユースケースって何だろう?

W3Cが公開しているXMLHttpRequest Level 2の仕様は↓こちら

http://www.w3.org/TR/XMLHttpRequest/ 参考まで