如题啦!谢谢!
Ajax请求__与__普通请求__有什么__区别?
看似没啥区别,我就是想知道差别好返回不同的东西,express 和用req.xhr来判断,不知道原生的怎么搞,看了express的源码,小弟不才没看懂!
Express里面的代码是这样的:
/**
* Check if the request was an _XMLHttpRequest_.
*
* @return {Boolean}
* @api public
*/
req.__defineGetter__('xhr', function(){
var val = this.get('X-Requested-With') || '';
return 'xmlhttprequest' == val.toLowerCase();
});
使用原始的ServerRequest对象来判断的话,可以这样:
if (req.headers['x-requested-with'] && req.headers['x-requested-with'].toLowerCase() == 'xmlhttprequest') {
// 是AJAX请求
} else {
// 普通请求
}
你试试看
其实就是看headers里的X-Requested-With的值是不是xmlhttprequest。。。
谢谢楼上两位仁兄回答,但是其实 req.headers[‘x-requested-with’] 得到是undefined ,我看express的时候也以为这样可以判断,结果的确是不行~
如果你想要给ajax请求返回不同的东西,按照http协议的约定,应该是XmlHttpRequest在请求的时候设置Accept头(默认是*/*),例如,设置Accept头为application/json。然后服务器检查Accept头,如果是application/json,返回json;如果是application/xml,返回xml;否则返回html。
应当使用accept加1,某些旧的浏览器未实现x-request-with, 补充一下,应该检测accept头是否.match(//json$/) 因为标准的json mimetype为text/json
马克收藏
简单一点.自己增加一个字段ajax啥的就好了吧…关键看前后端业务的约定啊…
简单粗暴,在Ajax的参数中增加一个参数
的确很粗暴!
和楼下说的一样,都是以简单粗暴解决哈!
@xbl1949 鉴定是否ajax根本没有一个类似ecma5之类的标准给你参考,当然只能指定一个约定作为规则.怎么能说简单粗暴呢.