私は単純なget
関数をコールバックパラメータを受け付けるXMLHttpRequest
を使用しています。計画は、onload
イベントハンドラでコールバックを呼び出すことです。XMLHttpRequestとコールバックのバインディングが機能しない
get(url,doit);
function doit(data) {
alert(data)
}
function post(url,callback) {
var xhr=new XMLHttpRequest();
xhr.onload=function() { // Version 1
callback(xhr.response)
}
xhr.onload=callback.bind(xhr,xhr.response); // Version 2
xhr.open('get',url,true);
xhr.send(data);
}
コールバック関数は、Ajaxのコールからの応答であると考えられる一つのパラメータ、data
があります。ここでは
は簡易版です。
私は、コールバックを呼び出す2つのバージョンがあります:
- バージョン1は、単にイベントハンドラ関数内でコールバックを呼び出します。
- バージョン2は同じ処理を行うために
bind
を使用します。this
はxhr
オブジェクトに設定され、xhr.response
は引数として送信されます。
バージョン1を使用すると、すべて正常に動作します。バージョン2を使用する場合、data
パラメータは空です。
私はXMLHttpRequest
と.bind()
をかなりよく知っていると思っていましたが、なぜ2番目のバージョンが空であるのか分かりません。ここでは何が起こっていませんか?答えに
コメント
おかげで、私はそれを持っていると思います。
.bind()
は、この段階では、何もないxhr.responseText
の現在値、直ちに実行されます。
私がの将来の値で応答する必要がある場合は、最初のバージョンが望ましいと思われます。
ありがとうございます。
あなたはまだ '任意の応答がない.bind(XHR、xhr.response)'実行すると - > 'xhr.response === undefined' – Andreas