次のajax呼び出しを使用するJQuery1.3.2に依存する古いコードがあります
function ChangeContent(url, somepageobject) {
var xhrobj = $.ajax({
url: url,
context: somepageobject,
callback: doFurtherStuff,
success: function(data) {
somepageobject.html($(data));
this.callback.call(this.context[0], data, "ok"); // >> Code breaks here
}
});
return xhrobj;
}
上記のコードの問題は、JQuery 1.8.1にアップグレードしたときにthis.callbackがnullになることです。最も重要なのは、ChangeContent関数がさまざまな場所で使用されており、制御できないことです(外部ユーザーのAPIとして使用されます...等)。上記の使用例は次のようになります。
xhr_object = ChangeContent("/someurl, $("#resultContainer"));
function doFurtherStuff(responseText, statusText, XMLHttpRequest)
{
var identifier = '#' + this.id;
...
}
doFurtherStuffには、ChangeContent関数で指定されたコンテキストである正しい「this」オブジェクト値が必要であることに注意してください。別の遅延then()...などを使用しようとしたとき。アップグレード後に上記のthis.callback.call(this.context[0], data);
問題を解決するためのJQuery1.8.1の関数は、新しいJQueryライブラリが異なる方法で処理するため、コールバック関数の「this」オブジェクトの値が異なります。
すべてのユーザーにその関数からの呼び出しとコールバックの処理方法を変更するように求めないようにするために、ChangeContent関数への変更を制限しながら、上記のエラーを修正する方法はありますか?