它之前工作正常,我不记得有任何更改。我有一个表单,它将信息发送到一个“正在处理”的 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 就像我说的,我(昨天)让它工作了,我不记得有什么改变,除了在顶部进行客户端检查,我知道这根本不重要。
最佳答案
一些事情可能有助于解决这个问题。
首先,建议不要使用 return false 来阻止通常的点击事件发生。
最好在函数顶部做
preventDefault();
参见 http://fuelyourcoding.com/jquery-events-stop-misusing-return-false/
这应该会阻止表单提交并因此加载帖子页面而不是执行 ajax 调用。
第二个问题是您有一个显然没有被命中的 return false 调用。无论如何,上面的修复都会阻止表单提交,但我猜你在开始和返回 false 之间的代码中有一个 javascript 错误。这将引发异常,因此永远不会调用 return false。一旦安装了上述修复程序并停止重定向,请检查浏览器中的控制台是否存在异常。
干杯
关于php - Ajax 请求转到新页面而不是更新当前页面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9459229/