5

その関数をresponseTextに戻さないのはなぜですか?

function LoadBookmarksAsXml()
{
  return $.ajax(
  {
    type: 'GET',
    async: false,
    url:  'http://www.google.com/bookmarks/?output=xml&num=10000'
  }).responseText;
}

(success-callback-functionを定義し、asyncをtrueに設定すると機能します!)よろしくお願いします!!

編集:クロスドメイン呼び出しについて心配する必要はありません。user603003は、(削除された回答へのコメントで)これはクロスドメインリクエストが許可されているChrome拡張機能にあると述べています。

誰かが同じことをしたい場合の解決策:

return $.ajax(
{
  type: 'GET',
  async: false,
  url:  'http://www.google.com/bookmarks/?output=xml&num=10000',
});

(XMLHTTPRequestオブジェクトを取得します。)

4

5 に答える 5

11

なぜそれが返されないのかすぐにはわかりませんが、それでもsuccessコールバックを使用します:

function LoadBookmarksAsXml()
{
  var result;
  $.ajax(
  {
    type: 'GET',
    async: false,
    url:  'http://www.google.com/bookmarks/?output=xml&num=10000',
    success: function(data) {
        result = data;
    }
  });
  return result;
}

オブジェクト(1.4以前)またはオブジェクト(1.5以降)を$.ajax返しますが、わかりやすくするために関数と関数を使用することをお勧めします。また、jQueryのバージョンが異なれば、エラー時の値も異なります(少なくとも、Chromeでは、1.4.4は空の文字列を返し、1.5.0は空の文字列を返します)。XMLHttpRequestjqXHRsuccesserrorresponseTextundefined


あなたがそれを避けることができる方法があれば、それを避けてください。同期リクエストは、ほとんどのブラウザのUIを完全にロックします(ページのUIだけでなく、ブラウザが管理しているすべてのタブのすべてのページ)。ajaxリクエストには1〜2秒(または5、または10)かかることがあるため、これは非常に不快なユーザーエクスペリエンスになります。ほとんどの場合、関数をリファクタリングして、結果を提供するために使用するコールバックを受け入れるようにすることで、これを回避できます。

function LoadBookmarksAsXml(callback)
{
  $.ajax(
  {
    type: 'GET',
    url:  'http://www.google.com/bookmarks/?output=xml&num=10000',
    success: function(data) {
        callback(data);
    },
    error: function() {
        callback(null);
    }
  });
}

オフトピック:リクエストがまったく機能する場合は驚きますが、(Googleで働いていない限り)そのリクエストは同一生成元ポリシーのために失敗します。SOPを回避するさまざまな方法:

于 2011-02-04T10:58:34.823 に答える
1

$.ajax応答テキストを返すことはなく、Ajax呼び出しを行うために作成されたXMLHTTPRequestオブジェクトを常に返します。

成功のコールバックを定義する必要があります。たとえば、ローカル変数を設定して返すことができます。

標準の免責事項:同期リクエストは、現在のページをフリーズする可能性があるため、通常はお勧めできません。

于 2011-02-04T10:58:00.190 に答える
0

関数の応答を待つことは非同期ではありません。ajax呼び出しは完了すると応答を受け取ります。その後、成功したイベントのコールバックを定義することにより、応答を処理する必要があります。

コードを少なくとも2つの部分に分割する必要があります。最初の部分はajax呼び出しの前で、2番目の部分は成功の後であり、要求されたデータで実行するすべてのことを成功コールバックに入れます。非同期リクエストはこのように機能します。

于 2011-02-04T10:59:29.507 に答える
0

それをするのは本当に悪い考えです。Javascriptは、HTTPリクエストの期間中ブロックします。つまり、ajax呼び出しが戻るまで、UIスレッドで他に何も実行されません。コールバックを使用します。

于 2011-02-04T11:01:05.337 に答える
0

設計上、非同期リクエストは応答テキストを突然配信することはできません;-)コールバック関数を設定し、responseTextの処理方法を決定する必要があります。

于 2011-02-04T11:02:22.150 に答える