同步等待$ .ajax调用

时间:2013-10-07 10:43:29

标签: javascript jquery ajax

我需要一个超链接来执行Ajax调用,当它完成后,执行超链接的标准操作。

<a href="afterwards.html" target="_blank" onclick="return CallFirst();">Link</a>

javascript函数调用$.ajax(),等待成功或失败,然后返回true。

function CallFirst()
{
    $deferred = $.ajax({
                    type: "POST",
                    url: url,
                    data: data
                });

    // **todo** WAIT until the Ajax call has responded.

    // Return true, which makes the <a> tag do it's standard action
    return true;
}

代码必须等待$.ajax成功,然后从CallFirst()返回true。

$deferred.when()立即终止。如何才能等待?

3 个答案:

答案 0 :(得分:8)

只需将async属性设置为false

即可
$deferred = $.ajax({
                type: "POST",
                url: url,
                data: data,
                async: false
            });

但使用回调确实是一个更好的主意。

答案 1 :(得分:1)

您可以将async设置为false,但更好的做法是使用回调:

.done(function( success) {
    if (success) {
      doSomeThingElseNow();
    }
  });

答案 2 :(得分:0)

使用来自jquery的ajax回调构建。

$.ajax({
    url: '/path/to/file',
    type: 'default GET (Other values: POST)',
    dataType: 'default: Intelligent Guess (Other values: xml, json, script, or html)',
    data: {param1: 'value1'},
})
.done(function() {
    console.log("success");
})
.fail(function() {
    console.log("error");
})
.always(function() {
    console.log("complete");
});