以前工作过,我不记得改变什么。我有一个表单,它将信息发送到“处理”的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就像我说的那样,我工作了(昨天)我不记得改变了什么,除了在顶部取出客户端检查,我知道这根本不重要。
答案 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错误的信息。