CNode

使用原生nodejs 不用express之类的框架,怎么知道req 是不是Ajax 请求呢?

Xxbl1949发布于14 年前最后回复14 年前13 回复15154 浏览0 收藏

如题啦!谢谢!

查看回复

回复 (13)

L
leizongmin#1·14 年前

Ajax请求__与__普通请求__有什么__区别

X
xbl1949#2·14 年前
引用 leizongminAjax请求 与 普通请求 有什么 区别 ?

看似没啥区别,我就是想知道差别好返回不同的东西,express 和用req.xhr来判断,不知道原生的怎么搞,看了express的源码,小弟不才没看懂!

L
leizongmin#3·14 年前

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 {
  // 普通请求
}

你试试看

X
xiaojue#4·14 年前

其实就是看headers里的X-Requested-With的值是不是xmlhttprequest。。。

X
xbl1949#5·14 年前

谢谢楼上两位仁兄回答,但是其实 req.headers['x-requested-with'] 得到是undefined ,我看express的时候也以为这样可以判断,结果的确是不行~

R
rekey#6·14 年前

简单一点.自己增加一个字段ajax啥的就好了吧..关键看前后端业务的约定啊...

I
island205#7·14 年前

简单粗暴,在Ajax的参数中增加一个参数

I
imzshh#8·14 年前

如果你想要给ajax请求返回不同的东西,按照http协议的约定,应该是XmlHttpRequest在请求的时候设置Accept头(默认是*/*),例如,设置Accept头为application/json。然后服务器检查Accept头,如果是application/json,返回json;如果是application/xml,返回xml;否则返回html。

T
tangzx#9·14 年前

应当使用accept加1,某些旧的浏览器未实现x-request-with, 补充一下,应该检测accept头是否.match(//json$/) 因为标准的json mimetype为text/json

C
cony138#10·14 年前

马克收藏

X
xbl1949#12·14 年前
R
rekey#13·14 年前
引用 rekey简单一点.自己增加一个字段ajax啥的就好了吧..关键看前后端业务的约定啊...

@xbl1949 鉴定是否ajax根本没有一个类似ecma5之类的标准给你参考,当然只能指定一个约定作为规则.怎么能说简单粗暴呢.

参与回复
登录后即可参与回复。登录