Ajax / Jquery重定向调用不起作用

时间:2011-07-11 19:52:18

标签: javascript jquery ajax

所以从我的php,我回应{error:1}:

$(document).ready(function(){
    $('#form').submit(function(e){
        register();
    });
});

function register(){
    $.ajax({
        type:"POST",
        url:"submit.php",
        async : false,
        data: $('#form').serialize(),
        dataType: "json",
        success: function(msg){
            if(parseInt(msg.error)==1){
                window.location="index.html";
            }
            else if(parseInt(msg.error)==0){  
                $('#error_out').html(msg.error);
                e.preventDefault();
            }
        }
    });
}

但它不想重定向。相反,它返回“submit.php”与1 echoed。

2 个答案:

答案 0 :(得分:2)

好吧,你不能只返回1,因为那不是JSON。如果您只是返回'1'并对其执行parseInt,请将dataType设置为'html'。


如果你想要JSON,请在PHP中执行此操作:

$return = array('code'=>1);
echo json_encode($return);

您的“成功”功能如下所示:

if(msg.code==1){
    window.location="index.html";
}
else if(msg.code==0)
{
    $('#error_out').html(msg.code);
    e.preventDefault();
}
else 
{ 
   // handle any other return value.
}

好的,我没有正确阅读问题。问题是您提交表单,而不是正确取消它。在您的事件处理程序中执行此操作:

$(document).ready(function(){
    $('#form').submit(function(e){
        e.preventDefault();
        register();
    });
});

您可以删除失败案例中的那个。那个没有做任何事情,因为当异步函数回来时(如果它完全没有),堆栈就已经清除了。

答案 1 :(得分:1)

您必须阻止表单提交。

$(document).ready(function(){
    $('#form').submit(function(e){
        register();

        e.preventDefault(); // Or return false;
    });
});

您的表单提交和ajax没有机会处理其回调。