0

JQuery 1.3.2 を最新バージョン (現在は 1.8.1) にアップグレードするタスクが割り当てられました。$.ajax 関数を除いて、アップグレード後はすべて正常に動作しているようです。次のコードはサーバーを呼び出し、コールバックを実行します。doFurtherStuff追加の作業を実行する関数:

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); // >> Code breaks here
           }
  });
  return xhrobj;
 }

このコード ブロックを実行すると、サーバー データは問題なく返されますが、次のエラーが発生します。

IE10 および IE9:

JavaScript ランタイム エラー: 未定義または null 参照のプロパティ 'call' を取得できません

グーグルクローム:

キャッチされていない TypeError: 未定義のメソッド 'call' を呼び出せません

オブジェクト「コールバック」は 1.8.1 では定義されていませんが、1.3.2 ではすべて問題ありません。必要に応じてコードを変更できます。方法がわかりません。

4

2 に答える 2

3

クライアント(呼び出し先)が通信してメソッドにパラメーターを送信する方法を変更しない限り、他のすべてのソリューション(正しい場合)は私の問題を解決しないため、私は自分の質問に答える必要があります。私は制御できないため、それを行うことはできませんそれら(外部クライアント)。

上記の例の「context」を「thecontext」に変更して、JQuery 1.8.1 で動作するようにするだけで済みます。動作するコードは次のとおりです。

function ChangeContent(url, somepageobject) {
   var xhrobj = $.ajax({
       url: url,
       thecontext: somepageobject,
       callback: doFurtherStuff,
       success: function(data) {
                somepageobject.html($(data));
                this.callback.call(this.thecontext[0], data); // >> Code breaks here
           }
  });
  return xhrobj;
于 2012-09-19T07:48:47.070 に答える
0

jQuery then() を使用してみてください: http://api.jquery.com/deferred.then/

ajax() は Deferred オブジェクトを返すため、完了後にアクションを実行できます。

于 2012-09-14T11:42:47.350 に答える