ajax请求在重定向后完成

时间:2012-12-28 17:18:37

标签: php javascript codeigniter

我有一个ajax请愿问题,我有如下功能

function do_ajax (params, url, callback) {
    $.ajax({
        url: url,
        type: 'post',
        data: params,
        success: function (response){
            try{
                var obj = $.parseJSON(response);
                callback(obj);
            }catch(e){
                alert('Cannot connect');
            }
        },
        error: function (jqXHR, textStatus, errorThrown){
            alert('err');
            console.log(jqXHR)
            console.log(textStatus)
            console.log(errorThrown)
        }
    });
}

我用

打电话
function verificar_atenciones_paciente (p) {
    progress();
    do_ajax('', '<?php echo base_url(); ?>index.php/some/where/'+p.id, callback);
}

function callback (obj) {
    var table = $('#table tbody')
    var t = false;
    table.empty();
    if (0 == obj.length){ return; }
    $(obj).each(function (key, value){
        if (value.f){
            tiene = true;
        }else{
            alert('Redirect');
            window.location.href = '<?php echo base_url(); ?>index.php/some/where_else/'+value.id;
            return;
        }
        var tr = to_row(value);
        table.append(tr)
    })
    if (tiene_fac){
        alert("Found!");
    }else{
        alert("Not Found!")
    }
    $('#list').fadeIn();
    done();
}

当调用重定向(window.location.href = '<?php echo base_url(); ?>index.php/some/where_else/'+value.id;)时出现问题它在后台执行一些ajax并显示ajax请求的错误(alert('Cannot connect');)。

我使用PHP,Code Igniter,JQuery。

提前致谢

3 个答案:

答案 0 :(得分:0)

此页面是否返回JSON?

<?php echo base_url(); ?>index.php/some/where/'+p.id

如果不是,parseJSON可能会抛出异常。尝试返回一些JSON

echo '{"f":{"test":1},"test2":1}';

应该做的伎俩。

我还会将alert()更改为console.log(),因为它可以更轻松地使用开发人员工具观看进度。

答案 1 :(得分:0)

ajax请求绑定到行表中的click事件。没有发布任何表单(onsubmit="return false;")。我使用setTimeOut在arround上工作,并在两秒后调用重定向以让ajax post链完成。我想问题是ajax请求被abrubtally中断所以它抛出异常。由于它延迟了请求,它让我们正常完成ajax请求,然后再进行重定向。我很想得到一些其他的建议.. 谢谢你的帮助。

答案 2 :(得分:0)

您可以尝试设置

async: false 
在你的ajax请求中

,这将导致它在请求完成之前保持不变。