4

私はYAHOO.util.Connect.asyncRequestを使用してデータベースからデータを取得しています。コードは次のとおりです。

function getCountArticle(contentCurValue) {

  var handleSuccess = function (res) {
      var countPubmed = YAHOO.lang.JSON.parse(res.responseText);
      var contentCountPubmed = countPubmed.totalArticleRecords;
      alert(contentCountPubmed); //return 15 for example
  };

  var handleFailure = function () {
      alert("Error connecting data : Bad pubmed query");
  };

  var callback =
  {
    success:handleSuccess,
    failure:handleFailure,
    timeout: 5000
  };

  var sURL = 'qct-list-article.html?term=' + contentCurValue + '&retstart=0' + '&retmax=1';

  var request = YAHOO.util.Connect.asyncRequest('GET',sURL,callback);

}

この関数が「contentCurValue」(例:15)を返すようにしたいのですが、このコードを使用しようとすると「undefined」になります。

var test = getCountArticle();
alert(test); // return undefined, should return 15

私のエラーはおそらく非同期クエリが原因ですが、どうすれば「var test = getCountArticle();」を強制できますか?結果を待つには

4

1 に答える 1

10

呼び出しは本質的に非同期であるため、応答を待機するのではなく、データを使用して実行するコールバック関数を指定することをお勧めします。次のようにメソッドを変更できます。

 function getCountArticle(contentCurValue, callback) {
  var handleSuccess = function (res) {
      var countPubmed = YAHOO.lang.JSON.parse(res.responseText);
      var contentCountPubmed = countPubmed.totalArticleRecords;
      callback(contentCountPubmed); //return 15 for example
  };
  // ...
} 

その場合、呼び出しコードは次のようになります。

 getCountArticle("contentCurValue", function(test) {
    alert(test);
}); 

AJAXクエリから返された値を使用してさらに実行すると、コールバックメソッド内で続行されます。

このSO投稿は本質的に同じ問題ですが、YUI固有ではありません:ajaxを呼び出すときにjavascriptで未定義になる

于 2010-07-07T12:49:32.693 に答える