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 循环阻塞了其他所有内容,因此它无法运行任何其他函数。它不是多线程的。

您可以使用异步,但它已被弃用。如果你让它同步,你的 GUI 很可能会被阻塞,尤其是当它使用 javascript 时。

无论您需要做什么,都应该使用回调。重构您的代码,以便无论您想对返回值做什么,都可以在回调中执行。

于 2012-09-03T05:12:34.690 回答