0

明らかな何かが欠けていると確信していますが、それが何であれ、それを理解できないようです。

これが私が持っているものです

var warr = new Array();

$('#step3next').click(function() {
    $.post('AJAX_GetGameWords.asp',function(data) {
        fw(data.warray);
    },"json");

    $('.vardisplay3').append(warr+'');
});

function fw(x) {
    warr = [x]; 
}

最終的に私が望んでいるのは、warr 配列をどこでも使用できるようにすることです。

$('.vardisplay3').append(warr+''); fw(data.warray);のすぐ下に置くと その後、正常に動作し、.vardisplay3 に表示されますが、現在の場所では何も表示されません。

warr はグローバルに設定されているのでうまくいくと思いますが、スコープの問題か何かが明らかに欠けています。

何が起こっているのか、どこでも warr 配列を使用できるようになるのか、誰でも説明できますか?

ありがとう

4

3 に答える 3

3

これはスコープの問題ではなく、実行順序の問題です。 .post()非同期なので、次のコード行:

$('.vardisplay3').append(warr+'');

このコード行のに実行されています:

fw(data.warray);

スコープは問題ありませんが、非同期 AJAX 呼び出し (戻り値の追加など) に応答して何かを実行したい場合は、その AJAX 呼び出しのコールバック関数から呼び出す必要があります。そうしないと、AJAX 呼び出しが完了する前に実行され、使用するデータがありません。

于 2013-05-07T16:37:06.833 に答える
0

このようなajax呼び出しで$.postを変更する と、データを簡単にコールバックして、この問題を防ぐことができます...

$.ajax({
  type: "POST",
  url: "AJAX_GetGameWords.asp",
  data: "",
  async: false,
  success: function(t){
    alert(t);// You can call your function HERE
  }
});  
于 2013-05-11T09:02:52.753 に答える