0

関数を使用して、json データのサーバーに ajax リクエストを呼び出そうとしています。respajax 関数内の変数をコンソールに出力すると、データが正常に表示されます。ajax 関数を変数に設定しようとすると、その変数が undefined を返します。関数にデータを要求させ、ti を変数に設定してコンソールするアイデアはありますか?

function jsonData(URL) {
var xhr = new XMLHttpRequest();
xhr.open("GET", URL, true);
xhr.onreadystatechange = function() {
  if (xhr.readyState == 4) {
    var resp = JSON.parse(xhr.responseText);
    return resp;
  }
}
xhr.send();
}

jsonString = jsonData(http://mywebsite.com/test.php?data=test);

console.log(jsonString);
4

1 に答える 1

3

これは実際には非常に単純です。呼び出しを by synchronous.. に変更します。

xhr.open("GET", URL, false);

そうは言っても、これは操作が完了するまでブラウザをブロックします。代わりにコールバックを使用できる場合は、おそらく優先されます。

function jsonData(URL, cb) {
  var xhr = new XMLHttpRequest();
  xhr.open("GET", URL, true);
  xhr.onreadystatechange = function() {
    if (xhr.readyState == 4) {
      var resp = JSON.parse(xhr.responseText);
      cb(resp);
    }
  }
  xhr.send();
}

jsonData("http://mywebsite.com/test.php?data=test"
        , function(data) { console.log(data); });
于 2012-11-14T05:35:13.280 に答える