2012-01-09 75 views
2

我正在用JQuery和PHP构建ajax表单。 PHP文件验证提交的数据并发回json编码的消息。然而,如果JavaScript是关闭状态,消息如下所示:PHP - 显示Json编码的消息

{"error":true,"msg":"- Please enter your name!"} 

使用什么方法,如果JavaScript并不是在浏览器中启用只显示消息?

这是PHP函数我目前使用的将消息发回的JQuery:

function mcResponseMessage($mcRespBool, $mcRespMessage){ 
    $mcReturn['error'] = $mcRespBool; 
    $mcReturn['msg'] = '- '.$mcRespMessage; 
    echo json_encode($mcReturn); 
    exit(); 

}

谢谢!

+4

2012年没有人关心没有javascript的用户 – zerkms 2012-01-09 22:02:20

+0

您可以使用javascript将参数添加到ajax url。所以如果该参数不存在,您将提供一个页面而不是json代码 – Ibu 2012-01-09 22:05:35

+1

如果JavaScript未启用,则首先不会有AJAX请求提交数据。 – Mchl 2012-01-09 22:07:39

回答

1

您可以将标志您的AJAX请求,应该说它是一个AJAX请求,因此您可以输出JSON的AJAX请求,并只输出消息时的形式通常是提交:

$.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']

+0

谢谢!你是唯一了解我的问题的人,这正是我所寻找的解决方案。 – user1002039 2012-01-09 22:13:45

0

如果JavaScript未启用,那么您的jQuery调用将不会执行。你的应用程序将会死机。我建议在页面加载时检查JS,这会让你知道你是否可以使用你的jQuery函数,或者你是否需要去发布帖子。

1

如果Javascript被禁用,那么您完全可以使用JSON响应来做任何事情。如果你想支持禁用脚本的用户,那么你必须以更好的方式编排事物:

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

Json编码的响应由php发回。 – user1002039 2012-01-09 22:12:48

+0

@ user1002039:将代码更改为按上述方式工作,或者接受您的网站在没有Javascript的情况下无法正常工作。没有第三种选择。 – Jon 2012-01-09 22:14:19

+0

对不起乔恩,表单工作得很好没有JavaScript。如果JavaScript未启用,表单只会以常规形式提交。这个解决方案由Jasper在下面提供...... – user1002039 2012-01-09 22:17:52