0

へのシンタックス シュガーを作成したいと思いますAjax.Response()

このような:

AjaxGet = function(url) {
  ar = new Ajax.Request(url,
       { onSuccess: function(transport) {
             alert(transport.responseText);
             return transport.responseText;
          }
       });
  return ar.responseText;
}

となることによって

title = AjaxGet('/favouriteMovie?horrors=true')

titleAjax リクエストの結果を変数に格納します。しかし、上記の関数コードは機能せず、戻りませんresponseText

4

2 に答える 2

1

ajax 呼び出しが非同期であるという問題があります。Ajax.Get 呼び出しで非同期: false を指定すると、より簡単に修正できます。例えば:

AjaxGet = function(url) {
  ar = new Ajax.Request(url,
       { onSuccess: function(transport) {
             alert(transport.responseText);
             return transport.responseText;
          },
         asynchronous: false
       });
  return ar.responseText;
}

ただし、リクエストの非同期機能を保持し、必要に応じて成功関数のコールバックを微調整することをお勧めします。

于 2010-12-25T17:34:30.100 に答える
1

これは、決して実行してはならない同期 Ajax を使用している場合にのみ実行できます。ブラウザ全体のユーザー インターフェイスは、リクエストの間応答しなくなりますが、これを予測する方法はありません。

したがって、あなたができる最善のことは、ある種のコールバックを含むことです:

function AjaxGet(url, callback) {
  new Ajax.Request(url, {
    onSuccess: function(xhr){ callback(xhr.responseText) }
  });
}

ただし、このアプローチには次のような問題があります。

  1. XML コンテンツ タイプを処理することはできません。
  2. カスタム ヘッダーを設定することはできません。
  3. あらゆる種類のエラーを処理することはできません。

Ajax.Requestこれらの理由から、必要なときはいつでもフルを使用することをお勧めします.

于 2010-12-25T17:36:30.413 に答える