Ajax请求转到新页面而不是更新当前页面?

时间:2012-02-27 02:08:06

标签: php javascript jquery ajax

以前工作过,我不记得改变什么。我有一个表单,它将信息发送到“处理”的PHP文件,并应得到回复。相反,它只是进入“处理”php并在新页面上回显JSON数据。 Jquery包含来自谷歌和表单页面,“进程”页面都在同一目录中。

$data = array(  
    'status' => $status,  
    'message' => $errorMsg  
);  

echo json_encode($data);

if ($status == "success"){
session_destroy();
}
exit();

这就是它在所有处理结束时所做的事情(确保数据良好以及所有可行的方法)。这是使用的JavaScript:

$(document).ready(function(){  
   $('#signupForm').submit(function(){
//various client side checks to keep form from submitting easy to see garbage

 if($(this).data('formstatus') !== 'submitting'){
   var responseMsg = $('#response');
    responseMsg.hide()  
               .addClass('response-waiting')  
               .text('Signing Up...')  
               .fadeIn(200);  



var dataString = //the data  
$.ajax({  
    type: "POST",  
    url: "process.php",  
    data: dataString,  
    success: function(data) { 


            var responseData = jQuery.parseJSON(data),  
                messageClass = '';  

            switch(responseData.status){  
                case 'error':  
                   messageClass = 'response-error';  
                break;  
                case 'success':  
                   messageClass = 'response-success';  
                break;  
            }  

            responseMsg.fadeOut(200,function(){  
                $(this).removeClass('response-waiting')  
                       .addClass(messageClass)  
                       .text(responseData.message)  
                       .fadeIn(200,function(){   
                           setTimeout(function(){  
                               responseMsg.fadeOut(200,function(){  
                                   $(this).removeClass(messageClass);  
                               });  
                           },5000);  
                        });  


             });  


        }
}); 
}

return false; 


});  
})

如果有具体的东西我应该寻找,请告诉我,我会更新。 qand就像我说的那样,我工作了(昨天)我不记得改变了什么,除了在顶部取出客户端检查,我知道这根本不重要。

2 个答案:

答案 0 :(得分:2)

解决这个问题可能有一些帮助。

首先,建议不要使用return false来停止点击事件的正常发生。

最佳做法是在函数顶部执行

preventDefault();

请参阅http://fuelyourcoding.com/jquery-events-stop-misusing-return-false/

这应该会停止提交表单,从而加载帖子页面而不是进行ajax调用。

第二个问题是你有一个返回错误的电话,显然没有被击中。上面的修复将阻止表单提交无论如何,但我猜你在开始和返回false之间的代码中有一个javascript错误。这将抛出异常,因此永远不会调用返回false。放入上述修复程序并停止重定向后,请在浏览器中检查控制台是否存在异常。

干杯

答案 1 :(得分:0)

我假设您的表单操作正在标题process.php,并且您在提交时不会返回false。

应该是这样的

<form name='myForm' action='nonjspage.php' method='post' onsubmit='return false;'></form>

如果错误仍然存​​在,那么它不是你的形式,而是javascript中的错误。根据您使用的浏览器,有一个错误控制台。

在Firefox中,您可以前往菜单 - &gt;网络开发者 - &gt;网络控制台。

打开此页面后,重新加载页面并再次按“提交”按钮,它会显示有关您的javascript错误的信息。