0

ええと、私はAjax PostリクエストにJQueryを使用していて、データを取り戻していました。

Ajaxは正常に動作していますが、次のようになります。

coordinates = [];

$.post("ajax_markers.php",{time:time},function(result) { coordinates=result.split(','); alert(coordinates); });  // Alerts the Coordinates as Expected :)

だが..

$.post("ajax_markers.php",{time:time},function(result) { coordinates=result.split(','); });

alert(coordinates); // Alerts with a Blank Box :(

なぜこうなった ?
座標は両方に対してグローバルであるため、両方が同じデータでアラートを出す必要があります。

4

3 に答える 3

1

これで:

$.post("ajax_markers.php",{time:time},function(result) { coordinates=result.split(','); });
alert(coordinates); 

投稿がサーバーから戻る前に、すぐにアラートを実行しています。

ですから、問題は閉鎖よりも実行の順序に関係していると思います。

于 2011-05-03T04:05:46.303 に答える
1

呼び出しalert(coordinates);前に実行しfunction(result) {...}ます。非同期の世界へようこそ。

于 2011-05-03T04:06:04.797 に答える
0

それは理にかなっている。2番目の例では、alert(coordinates);はすぐに発生しています。一方coordinates = result.split(',');、比較的後で発生しています-リクエストが成功した後。2番目の例を機能させたい場合は、座標が割り当てられるのを待つ必要があります。この作業フィドルのようなもの:

http://jsfiddle.net/UtXgK/11/

var coordinates = 'no response from server yet';
$.post("/echo/json/",{json:'{"data":"one,two,three"}'},function(result) { coordinates=result.data.split(','); alert(coordinates[1]);});
setTimeout(function(){ alert(coordinates[2]); }, 5000);

$.postから結果を返すのに5秒もかからないと仮定します。

于 2011-05-03T04:06:25.900 に答える