提醒:本页面将不再更新、维护或者支持,文章、评论所叙述内容存在时效性,涉及技术细节或者软件使用方面不保证能够完全有效可操作,请谨慎参考!

今天浏览oschina.net的 《网站出bug了??还是被人黑了啊??》 发现的这个问题,发表评论采用了Ajax技术,但是直接提交Ajax没有起作用,导致返回了原本由JavaScript处理的JSON结果,出现这种情况多数是因为页面JavaScript加载失败或者用户禁用了脚本所致,回想到我以前的设计,有个小技巧可以解决这个问题,现与大家分享下:

基本思路就是在Ajax提交前加入自定义的HTTP请求header,然后结果处理页判断是否有这个header,如果有就说明对方是通过Ajax提交的数据,显示JSON结果;如果没有则说明Ajax没有起作用,然后就直接输出用户友好的标准结果页。

基本上JavaScript可以通过 setRequestHeader 设置请求头,比如我们设置一个值为1的自定义头信息为 X-AJAX-CLIENT

setRequestHeader("X-AJAX-CLIENT","1");

然后在程序后台可以使用类似下面的代码来判断(PHP示例):

<?php
if ($_SERVER['HTTP_X_AJAX_CLIENT'] == '1'){
	echo '{success:1}'; # JSON format
} else {
?>
<!DOCTYPE html>

<html>
  <head>
    <title>提交成功</title>
  </head>

  <body>
     <p>评论发布成功!</p>
  </body>
</html>
<?php
}