如何判断是否从fetch()调用了页面?

时间:2016-04-15 21:55:05

标签: javascript php

使用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) { ... }

然而,为每次提取写出那个标题并不理想。我有什么选择?有没有更好的方法来判断请求是否通过提取进行?

2 个答案:

答案 0 :(得分:0)

不,没有别的东西可以依赖。

理论上,根据请求方法,您不应该为服务器提供不同的行为;这应与您系统的后端定义的内容正交。

但是,如果你感到绝望,我非常喜欢你现有的解决方案;为简洁起见,你可以将它包装在一个函数中。

答案 1 :(得分:0)

由于您依靠客户端传递数据,因此您无法在正文中传递POST变量吗?通过javascript传递标题并不比简单地传递其他字段更安全。 (https://davidwalsh.name/fetch

fetch('/get/login', {
    body: JSON.stringify({
        source: : "fetch"
    }),
})
.then(function(response) { ... }