使用原生nodejs 不用express之类的框架,怎么知道req 是不是Ajax 请求呢?
如题啦!谢谢!
13 回复
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 {
// 普通请求
}
你试试看
谢谢楼上两位仁兄回答,但是其实 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