1

仕事が終わるまでJavaScriptを止めたい$.get。私はそれをするために使用whileしています。これは私のコードです:

function process() {
    var s = false;
    var text = "";
    var xs = oxl.join(",");
    var ys = oyl.join(",");
    $.post(processUrl, {
        xl: xs,
        yl: ys,
        text: text
    }, function(data) {
        text = data;
        s = true;
    });
    while (!s);
    return text;
}

しかし、コードは終了せず、whileハングします。完了 にテキストを返す方法を知りたいですか?$.post

4

3 に答える 3

4

processコールバックを積極的に使用して、メソッドが終了したことを通知するのを待たないでください。

function process(callback) {
    var xs = oxl.join(",");
    var ys = oyl.join(",");
    $.post(processUrl, {
        xl: xs,
        yl: ys,
        text: text
    }, function(data) {
      if ($.isFunction(callback))
        callback(data);
    });
}

呼び出す場所では、次processのように使用できます。

process(function (text) { /* do something with text */ }
于 2012-09-03T05:10:05.250 に答える
1

$.ajax代わりに使用して、asyncオプションを設定できます。

$.ajax({
     async: false,
     url: ...,
     success: function(result) {
         ...
     }
});   

http://api.jquery.com/jQuery.ajax/

于 2012-09-03T05:08:34.937 に答える
1

while ループが他のすべてをブロックし、他の関数を実行できないため、終了しません。マルチスレッドではありません。

async を使用できますが、非推奨です。同期にすると、特に JavaScript を使用している場合に、GUI がブロックされる可能性があります。

何をするにもコールバックを使用する必要があります。コードをリファクタリングして、戻り値でやりたいことは何でもコールバックで行うようにします。

于 2012-09-03T05:12:34.690 に答える