0

arrの値を取得できません。なにか提案を...

function my_f() {
    var arr;
    $.post('data.php', function(data) {
        arr = $.makeArray($("tr",data).map(function(){
            return $(this).attr("id");
        }).get());

        return false;
        //alert(arr); ...this work 
    });
    return arr;
}

alert(my_f()); //return undefined
4

5 に答える 5

0

postは非同期呼び出しであるため、機能しません。を呼び出すとmy_f()、呼び出してから、完了するのを待たずpostに戻ります。arrpost

于 2013-03-15T18:26:52.253 に答える
0

AJAX はこのようには機能しません。 $.postほとんどの場合、それを呼び出した関数が戻った 後に完了する、サーバーへの非同期要求を行います。

だいたいこんな感じで落ちます。

  1. 関数を入力
  2. リクエストを送信
  3. 終了関数 (リクエストが完了していないため null を返します)
  4. リクエストの完了 (現在arrは設定されていますが、手遅れです)
于 2013-03-15T18:27:38.150 に答える
0

あなたのアプローチには複数の問題があります。あなたがそれを機能させようとしている方法でajaxが機能していないことを除けば、arr何も設定しておらず、すべてがロードされる前にアラートが実行されています。アラートをラップする$( //code to run )と、次のコードで arr が何もないことを示すアラートが表示されます

function my_f() {
  var arr = '';
  $.post('data.php', function(data) {
  arr = $.makeArray ($("tr",data).map(function(){return $(this).attr("id")}).get());
  return false;
  //alert(arr); ...this work 
});
return arr;
}

$(alert(my_f())); //return undefined
于 2013-03-15T18:30:22.487 に答える
0

問題は、$.post が非同期であるため、arr を返そうとすると、まだ値がないことです。

次のようなことを試してください:

function my_f(callback) {
    $.post('data.php', function(data) {
        var arr = $.makeArray($("tr",data).map(function(){
            return $(this).attr("id");
        }).get());
        callback(arr);
        return false;
    });
}

my_f(alert);
于 2013-03-15T18:30:38.140 に答える
0

関数の内容は、回答を受け取る前に実行されます。

post 関数に渡す関数は、コールバック関数です。コールバック関数は、レスポンスを受信したときに実行される関数です。

また、「コールバック」関数はコールバック関数ではありません。応答を受信したときではなく、ポスト関数を呼び出した後に実行されるためです。

また、配列をアラートしても多くの情報は得られません。テストには console.log() を使用してください。

最後に、「callback」という関数ではなく、コールバック関数内で関連する値 (arr の値) を使用できます。

これがお役に立てば幸いです。

于 2013-03-15T18:48:53.153 に答える