解决客户端AJAX脚本失效或禁用导致显示JSON的问题
提醒:本页面将不再更新、维护或者支持,文章、评论所叙述内容存在时效性,涉及技术细节或者软件使用方面不保证能够完全有效可操作,请谨慎参考!
今天浏览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
}
很有深度的博客,学习了。谢谢大神的知识分享
不客气,欢迎常来:-)
jQuery的Ajax请求是有这个字段的。 很多php框架也加入了类似 IsAjax的判断。 public function is_ajax_request() { return ($this->server('HTTP_X_REQUESTED_WITH') === 'XMLHttpRequest'); } ASP中有时候这个字段不会初始化到Request.ServerVariables里面,所以我一般用下面的方式判断: Function IsAjax() If InStr(Request.ServerVariables("ALL_HTTP"),"HTTP_X_REQUESTED_WITH")>0 Then IsAjax=True Else IsAjax=False End If End Function
写完这篇文章后才发现原来已经有
X-REQUESTED-WITH
这个Header来进行判断了,不过我觉得ASP中保险起见除了要判断ALL_HTTP
中是否有HTTP_X_REQUESTED_WITH
这个头还应该判断内容是否是XMLHttpRequest
就像你说的PHP版一样,ASP可以试试下面的代码:不错。学习了