我正在用JQuery和PHP构建一个ajax表单。PHP文件验证提交的数据并发回json编码的消息。但是,如果javascript被关闭,则消息如下所示:
{"error":true,"msg":"- Please enter your name!"}
如果浏览器中没有启用javascript,那么只显示消息的方法是什么?
这是我目前用来向JQuery:发回消息的PHP函数
function mcResponseMessage($mcRespBool, $mcRespMessage){
$mcReturn['error'] = $mcRespBool;
$mcReturn['msg'] = '- '.$mcRespMessage;
echo json_encode($mcReturn);
exit();
}
谢谢!
您可以在AJAX请求中放置一个标志,说明它是AJAX请求,这样您就可以为AJAX请求输出JSON,并在表单正常提交时仅输出消息:
$.ajax({
data : { ajax : true }
...the rest of your AJAX code here
});
然后在您的PHP脚本中:
if (isset($_GET['ajax']) && $_GET['ajax'] == true) {
echo json_encode(array('error' => true, 'msg' => '- Please enter your name!'));
} else {
echo '- Please enter your name!';
}
请注意,如果您使用的是post
类型的AJAX调用,那么PHP将需要更改为引用该事实:$_POST['ajax']
而不是$_GET['ajax']
。
如果禁用Javascript,您绝对无法处理JSON响应。如果你想支持禁用脚本的用户,那么你必须用一种更好的方式来协调:
- 在提交表单时将表单POST到服务器;服务器应该验证输入并重定向到"成功"页面,或者在出现错误时重定向回同一页面(即使用PRG模式)。重定向之前,请将任何验证错误保存在会话变量中,以便在重定向后显示它们。这就是未启用JS的客户端与您的网站交互的方式服务器在这种模式下永远不会返回JSON
- 添加阻止提交表单的Javascript,并向服务器发出AJAX请求以验证数据。实际上,您现在已经劫持了启用脚本的用户的进程。服务器应该运行与上面相同的验证代码,但这一次你应该检测到它是AJAX请求(例如,通过使用一些特殊的HTTP头或请求变量),你不应该将错误保存到会话变量和重定向,而是应该将它们转换成JSON形式并返回
- 当验证AJAX返回时,处理响应并采取相应的行动
如果没有启用javascript,那么无论如何都不会执行jQuery调用。你的应用程序将失效。我建议在页面加载时检查JS,这会让你知道你是否可以使用jQuery函数,或者你是否必须使用一篇文章。