3

いくつかの SQL 呼び出しを統合するために、サーバーに対して 1 つのクエリを作成し、クライアント側で各結果を反復処理しようとしています。注意点は、次の結果を処理する前にユーザー入力を待つ必要があることです。これは可能ですか?

以下のような jquery 呼び出しがあります。

$.post('functions/file_functions.php', {type: 'test', f: 'load'}, function(data) {
    if (data.success) {
        $.each(data.files, function() {

            // Can I wait for user input at this point and then process the next
            // file after a users interaction (e.g. a button click)?

        });
    }
}, "json");
4

2 に答える 2

4

私は自分のコメントを少し拡張し、うまくいけばそれが有用な答えになることを願っています. JavaScript はシングル スレッドであるため、他の何か (要素がクリックされるなど) が発生するのを待っている間、関数の実行をブロックする方法はありません。代わりに、AJAX POST リクエストが正常に返されたときにファイルのリストを配列に格納し、別のclickイベント ハンドラーを使用してそれらを循環させることができます (クリックごとに 1 つのファイルを取得すると想定しています)。

コードは次のようになります。

$(function() {
    var files, index = 0;

    $.post('functions/file_functions.php', {type: 'test', f: 'load'}, function(data) {
        if (data.success) {
            files = data.files;
        }
    }, "json");

    $('.mybutton').click(function() {
        if(files) {
            var file = files[index++];
            // do something with the current file
        }
    });

});
于 2012-08-03T13:14:03.043 に答える
0

javascriptでユーザー入力を「ブロック」する方法の1つは、window.promptを呼び出すことです(window.confirmwindow.showModalDialogなど)。ただし、実際にはカスタマイズ可能ではありません。dataサーバーから戻ってくるものを保存して、ある種のユーザー入力イベントベースの処理を行うことをお勧めします。

コードでは、次のようになります。

var the_answer = window.prompt("What's the airspeed velocity of an unladen swallow?");
console.log(the_answer);
于 2012-08-03T13:09:44.977 に答える