请求完成时没有响应的Ajax

时间:2016-10-14 02:09:09

标签: jquery ajax

我创建了一个AJAX请求,在完成后重定向页面。它忽略了回应。

我试图确保它在重定向之前已经完成发送POST。我在网上找到的所有东西都有如何让它在成功或失败后触发。我不想等那么久。有没有办法让它等到发送POST然后再做一些事情?

$.ajax({
    data: "type=userLoginLog&username=" + username, //Post Username
    url: environmentalVariables.support_api_address
});
loginWithRefreshToken(refresh_token);

3 个答案:

答案 0 :(得分:1)

不,没有办法确切知道它何时发送。您从Ajax获得的唯一通知是收到响应或错误或请求超时。现在没有发送""通知。

您可以尝试并在计时器上进行重定向(尝试找到确保请求已发送的最短时间),但这可能是一个黑客攻击,并且可能很容易因浏览器的不同而异。

最好的解决方案是接收ajax调用的服务器返回一个立即响应(即使它还没有完成自己的处理)然后你可以在收到这样的响应时触发重定向:

$.ajax({
    data: "type=userLoginLog&username=" + username, //Post Username
    url: environmentalVariables.support_api_address
}).then(function() {
    loginWithRefreshToken(refresh_token);
});

如果服务器正确实现,这只需要很少的毫秒数就可以得到响应。

您甚至可以将上述两种方案结合起来,并在完成的第一个操作(计时器或ajax响应)上触发重定向:

function delay(x) {
    return new Promise(function(resolve) {
        setTimeout(resolve, x);
    });
}

var p = $.ajax({
    data: "type=userLoginLog&username=" + username, //Post Username
    url: environmentalVariables.support_api_address
});

// you will have to figure out what delay time is appropriate here
$.when(p, delay(200)).then(function() {
    loginWithRefreshToken(refresh_token);
})

答案 1 :(得分:0)

$.ajax({
    url: "post_url",
    type: 'post',
    data: dataObj,
    datatype: 'application/json',
    beforeSend: function() {
        // do something
    },
    complete: function() {
        // do something
    },
    success: function(response) {
        window.location.href= "_success_page_url";
    },
    error: function(jqXMLHttpRequest, textStatus, errorThrown) {
        window.location.href= "_error_page_url";
    }
});

答案 2 :(得分:0)

$.ajax({
    data: "type=userLoginLog&username=" + username, //Post Username
    url: environmentalVariables.support_api_address
}).done(function(){
    loginWithRefreshToken(refresh_token);
});
相关问题