1

JSON データを読み込むスクリプトがあります。

var tempJson;
$.post("scripts/getJSON.php", function(data) {
     tempJson = data;
}, 'json');
alert("");  //First alert
alert("That: " + tempJson);  //Second alert

最初のアラート行を含めると、2 番目のアラートで期待どおり [Object object] が表示されます。最初のアラート行を省略すると、2 番目のアラートで undefined を受け取ります。なんで?

4

3 に答える 3

4

これは非同期であるため、アラートを閉じるまでに ajax が完了し、データが返されて変数に割り当てられます。

あなたがすべき

var tempJson;
$.post("scripts/getJSON.php", function(data) {
     tempJson = data;
     alert(tempJson); // or whatever you want to do with the data should go here..
}, 'json');
于 2012-11-20T22:28:43.100 に答える
0

これはタイミングの問題のように思えます。リクエストを送信してから、コールバックの値をチェックする代わりに、ポスト スクリプトの直後にチェックしています。AJAXは非同期です...別名非同期JavaScriptおよびXML

var tempJson;
$.post("scripts/getJSON.php", function(data) {
     tempJson = data;

     // Callback here, response has most definitely happened
     alert(tempJson);
}, 'json');

// Response may not have happened yet when this is executed
alert("");  //First alert
// Still might not have happened when this is executed
alert("That: " + tempJson);  //Second alert
于 2012-11-20T22:28:10.177 に答える
0

jQuery AJAX はデフォルトで非同期です。そのため、リクエストが少し遅れると、アラートにリクエスト データが含まれません。正しいのは、コールバックでアラートを呼び出すことです。

現在、AJAX リクエストを同期に変更できますが、現在は jQuery によって廃止されており、ブラウザーがハングアップします。したがって、最良の方法は、jqXHRの成功/完了/エラー コールバック/イベントを使用することです。

于 2012-11-20T22:29:48.123 に答える