PHP-显示Json编码的消息


PHP - Displaying Json encoded messages

我正在用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响应。如果你想支持禁用脚本的用户,那么你必须用一种更好的方式来协调:

  1. 在提交表单时将表单POST到服务器;服务器应该验证输入并重定向到"成功"页面,或者在出现错误时重定向回同一页面(即使用PRG模式)。重定向之前,请将任何验证错误保存在会话变量中,以便在重定向后显示它们。这就是未启用JS的客户端与您的网站交互的方式服务器在这种模式下永远不会返回JSON
  2. 添加阻止提交表单的Javascript,并向服务器发出AJAX请求以验证数据。实际上,您现在已经劫持了启用脚本的用户的进程。服务器应该运行与上面相同的验证代码,但这一次你应该检测到它是AJAX请求(例如,通过使用一些特殊的HTTP头或请求变量),你不应该将错误保存到会话变量和重定向,而是应该将它们转换成JSON形式并返回
  3. 当验证AJAX返回时,处理响应并采取相应的行动

如果没有启用javascript,那么无论如何都不会执行jQuery调用。你的应用程序将失效。我建议在页面加载时检查JS,这会让你知道你是否可以使用jQuery函数,或者你是否必须使用一篇文章。