为什么在AJAX请求仍在运行时执行location.replace()?

时间:2017-03-14 12:40:03

标签: javascript jquery ajax replace location

我有这段代码:

getClients(id);
location.replace('/login/index.html');   

我的getClients()功能基本上是 asyc AJAX请求。
如果客户列表为空,则会重定向到另一个页面。这里是ajax请求中的代码

....
success: function(data){
    var json2 = $.parseJSON(JSON.stringify(data.result));
    $.cookie('usu', id, {path: '/'});
    if(json2.length < 2 && json2[0].UserClients.length === 0){  
        location.replace('/login/user_config.html');
        return false;
    }
    else{
        ....

但不知何故,如果客户对象为空,则首先执行location.replace('/login/index.html');,然后执行location.replace('/login/user_config.html');

如何解决?

2 个答案:

答案 0 :(得分:0)

由于此过程是动态的,您需要等待AJAX​​响应,所以我认为您可以使用 Loader 并在向AJAX发送请求之前调用它,如果您的条件不匹配那么那个案例隐藏了显示器的装载程序。

短代码可以帮助您,

beforeSend:function(){
    // init loader here
},
success: function(data){
    var json2 = $.parseJSON(JSON.stringify(data.result));
    $.cookie('usu', id, {path: '/'});
    if(json2.length < 2 && json2[0].UserClients.length === 0){  
        location.replace('/login/user_config.html');
        return false;
    }
    else{
        // stop loader here

答案 1 :(得分:0)

使用@Carcigenicate建议使用回调解决了问题。

结果代码如下:

getClients(id, location.replace('/login/index.html'));

请大家帮忙。