2012-02-27 90 views
1

这是以前工作,我不记得改变任何东西。我有一个表单,它将信息发送到“处理”php文件,并且应该得到回应。相反,它只是“处理”php并在新页面上回显JSON数据。 jquery包括谷歌和表单页面和“进程”页面都在同一目录中。Ajax请求转到新页面而不是更新当前页面?

$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; 


}); 
}) 

如果有什么具体的东西我应该找,请让我知道,我会更新。就像我说的那样,我已经在工作(昨天),我不记得改变任何事情,除非在顶部拿出客户端支票,我知道这根本不重要。

回答

0

我假设你的表单动作是标题process.php,并且你没有在提交时返回false。

它应该是这样的

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

如果错误仍然继续,那么它不是你的形式,但在JavaScript错误。根据您使用的浏览器有错误控制台。

在Firefox中,您可以进入菜单 - > web开发人员 - > Web控制台。

一旦你打开了这个页面,重新加载页面并再次按下提交按钮,它会给你提供关于你的javascript错误的信息。

+0

我一直忘记检查Web控制台。它最终成为一个无关脚本中的错误,这就是为什么我没有看到它。 – townie 2012-02-27 02:27:55

2

有几件事可能会帮助解决这个问题。

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

这是最好的做法是在功能上做

preventDefault(); 

看到http://fuelyourcoding.com/jquery-events-stop-misusing-return-false/

这应该提交,因此加载后页面,而不是做Ajax调用停止形式。

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

干杯

+0

好吧,它最终成为一个无关脚本中的错误,但感谢最佳做法。我会把它用来使用。 – townie 2012-02-27 02:29:29