使用jQuery,Ajax函数设置标题HTTP_X_REQUESTED_WITH
,因此使用PHP我可以这样做:
if(filter_input(INPUT_SERVER, 'HTTP_X_REQUESTED_WITH') === 'XMLHttpRequest')
{ ... }
这将告诉我使用Ajax请求页面。
现在我想将Ajax
功能更改为fetch()
。我查看了它设置的默认标头,我找不到任何可以用来判断请求是否是从fetch发送的。
我可以自己设置标题:
fetch('/get/login', {
headers: {
'X-Requested-With': 'fetch',
},
})
.then(function(response) { ... }
然而,为每次提取写出那个标题并不理想。我有什么选择?有没有更好的方法来判断请求是否通过提取进行?
答案 0 :(得分:0)
不,没有别的东西可以依赖。
理论上,根据请求方法,您不应该为服务器提供不同的行为;这应与您系统的后端定义的内容正交。
但是,如果你感到绝望,我非常喜欢你现有的解决方案;为简洁起见,你可以将它包装在一个函数中。
答案 1 :(得分:0)
由于您依靠客户端传递数据,因此您无法在正文中传递POST变量吗?通过javascript传递标题并不比简单地传递其他字段更安全。 (https://davidwalsh.name/fetch)
fetch('/get/login', {
body: JSON.stringify({
source: : "fetch"
}),
})
.then(function(response) { ... }