微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

JavaScript-HTTP_X_REQUESTED_WITH在Firefox 4中无法正常工作

我正在使用此代码重定向我的用户,从而阻止了他们浏览器中只有ajax的页面

if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && 
    strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {}
else {
    header("Location: /");
}

它在Google chrome,Firefox 26和IE11上运行良好,但是在firefox 4中,即使使用ajax加载,标题也会被触发.

我怎样才能解决这个问题?

解决方法:

您可以尝试自己设置HTTP_X_REQUESTED_WITH标头,或设置其他标头并对其进行检查:

$.ajaxSetup({
        beforeSend: function (request)
        {
            request.setRequestHeader("HTTP_X_REQUESTED_WITH",'xmlhttprequest');
            request.setRequestHeader("BACKUP_FIREFOX_AJAX", 'xmlhttprequest');
        }
 });

接着

if((isset($_SERVER['HTTP_X_REQUESTED_WITH']) && 
   strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') || 
   (isset($_SERVER['BACKUP_FIREFOX_AJAX']) && 
   strtolower($_SERVER['BACKUP_FIREFOX_AJAX']) == 'xmlhttprequest'))

不知道它是否会在Firefox 4(确实是旧版本)中起作用,但是值得一试.

好的,在深入研究时,似乎存在一个古老的Firefox错误,其中:1)如果重定向了xhr,则自定义标头会丢失; 2)当“自动代理检测”运行时,firefox有时会进行内部重定向,从而触发1.中的问题

因此,您可能需要执行除标头之外的其他操作…也许将查询字符串参数附加到所有传出的ajax请求中,我不确定是否需要直接修改url或GET请求的数据,所以我会两者都做,并希望它能起作用:

$.ajaxSetup({
  beforeSend: function(jqXHR, settings) {
      if (settings.url.split('?').length > 1) {
         settings.url = settings.url + '&ajax=1';
      }
      else {
          settings.url = settings.url + '?ajax=1';
      }
   },
data: {
    ajax: '1'
  }
});

然后您可以执行以下操作:

if((isset($_SERVER['HTTP_X_REQUESTED_WITH']) && 
strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') || 
$_GET['ajax']==1)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐