AJAX(jQuery)到PHP,&#39; Access-Control-Allow-Origin&#39;标头包含多个值&#39; <domain>,*&#39;,但只允许一个

时间:2018-05-18 12:30:59

标签: php jquery ajax cors request-headers

所以我得到了这个加载大量数据的页面,因此我使用无限滚动。客户端html使用jQuery对服务器上的PHP文件执行AJAX请求。

该页面与服务器位于不同的域,这就是需要access-control-headers / allow-origin的原因。

我没有测试它,它确实给出了以下错误:

  

请求标头字段X-Requested-With在预检响应中不允许使用Access-Control-Allow-Headers。

现在,当我在PHP文件中添加标题时,我得到了这个:

  

对预检请求的响应未通过访问控制检查:“访问控制 - 允许 - 来源”&#39;标头包含多个值&#39;域,*&#39;,但只允许一个。起源&#39;域名&#39;因此不允许访问。

服务器端PHP:

header('Access-Control-Allow-Origin: https://di.community');
header('Access-Control-Allow-Headers: X-Requested-With');    
$start = $_GET['start'];
echo json_encode(array_slice($tokenData, $start, 500));

客户方:

$.ajax({
    if (working == false) {
        working = true;
        type: "GET",
        url: "serverdomain/data.php?start="+start,
        processData: false,
        contentType: "application/json",
        data: '',
        success: function(r) {
            r = JSON.parse(r)
            start += 500;
            setTimeout(function() {
                working = false;
            }, 100)
        },
        error: function(r) {
            console.log("Something went wrong!");
        }
    }
});

我已将客户端域名修改为&#34;域名&#34;。我只希望特定域能够访问,这就是我不使用*的原因。我已将服务器域修改为&#34; serverdomain&#34;。

所以是的,每当用户滚动到页面底部时,这个AJAX就会触发。但由于某种原因,当我添加标题时,它认为我为Allow-Origin标头设置了多个值。同样,这两个错误之间的唯一区别是将以下内容添加到php脚本中:

header('Access-Control-Allow-Origin: https://di.community');
header('Access-Control-Allow-Headers: X-Requested-With');

如果有人能指出我为什么会这样做的方向,我将非常感激:P。

编辑:我检查了可能的副本。这不是同一个问题,但是它的最佳答案建议使用.htaccess来获得想要的结果,这导致我检查.htaccess以查看它是否与我的多值错误有关,它确实。 :)现在修复,谢谢Nico

1 个答案:

答案 0 :(得分:0)

感谢Nico Haase的评论,我查看了.htaccess,其中包含以下几行:

[Authorize]

哪个解释了错误。删除这个并不明智,它与wordpress相关,我觉得我可能会破坏一些需要它的东西。

所以我现在所做的就是在PHP中设置它:

<FilesMatch "\.(php)$">
  <IfModule mod_headers.c>
    Header set Access-Control-Allow-Origin "*"
  </IfModule>
</FilesMatch> 

在.htaccess中触发添加Allow-Origin标头的内容。

现在有效!愚蠢的我没想到.htaccess与此有关。