使用原生nodejs 不用express之类的框架,怎么知道req 是不是Ajax 请求呢?
发布于 11 年前 作者 xbl1949 13688 次浏览 最后一次编辑是 8 年前

如题啦!谢谢!

13 回复

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之类的标准给你参考,当然只能指定一个约定作为规则.怎么能说简单粗暴呢.

回到顶部