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

Javascript Ajax/Jquery重定向调用不起作用,javascript,jquery,ajax,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'

因此,从我的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。

好吧,不能只返回1,因为这不是JSON。如果您只是返回“1”并对其执行parseInt,请将数据类型设置为“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,因为那不是JSON。如果您只是返回“1”并对其执行parseInt,请将数据类型设置为“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();
    });
});

在失败的情况下,您可以删除一个。那一个没有做任何事情,因为在异步函数返回时堆栈已经被清除了(如果它真的清除了的话)。

您必须防止表单提交自身

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

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

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

您必须阻止表单自行提交

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

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

您的表单提交了,ajax没有机会进行回调。

我知道,我知道,我返回的是json(在我的代码中)。只是想让它更容易阅读。json部分工作,jquery显示divs工作的错误,只是它没有重定向我。我实际上是在我的代码msg.txt中使用的,它代表URL。不要在没有测试的情况下简化测试用例,因为它也被破坏了。。。构建一个表现出相同行为的模型。:)无论如何,我的附加注释可能会有所帮助,否则我们需要实际查看更多代码。写1而不是完整的json是我的错。考虑到上面的代码,应该可以在IE中工作。最可能的候选对象是在任何地方都能工作的东西,但IE是$.ajax调用中的一个额外逗号(如果您有更多的代码,也可以是类似的东西)。我知道,我知道,我返回的是一个json(在我的代码中)。只是想让它更容易阅读。json部分工作,jquery显示divs工作的错误,只是它没有重定向我。我实际上是在我的代码msg.txt中使用的,它代表URL。不要在没有测试的情况下简化测试用例,因为它也被破坏了。。。构建一个表现出相同行为的模型。:)无论如何,我的附加注释可能会有所帮助,否则我们需要实际查看更多代码。写1而不是完整的json是我的错。考虑到上面的代码,应该可以在IE中工作。最有可能的候选对象是在任何地方都能工作的东西,但IE是$.ajax调用中的一个额外逗号(或者类似的东西,如果你有更多的代码)。那么我什么时候可以提交我的表单?你需要提交表单吗?从代码示例中,我给人的印象是,您正在使用表单作为ajax调用的包装器。如果没有出现错误,我希望提交并重定向,否则除了执行jquery操作外,什么都不做。您已经通过ajax提交了表单。你不需要再次提交数据。那么我什么时候可以提交表格?你需要提交表格吗?从代码示例中,我给人的印象是,您正在使用表单作为ajax调用的包装器。如果没有出现错误,我希望提交并重定向,否则除了执行jquery操作外,什么都不做。您已经通过ajax提交了表单。您不需要再次提交数据。