我正在处理一个JavaScript脚本,该脚本向另一个服务器(我自己的域)发出AJAX请求。使用插件将JavaScript脚本添加到页面。它应该从我域上的PHP文件中检索数据。
我在PHP文件中添加了以下标头:
<?php
header("Access-Control-Allow-Origin: *");
但是AJAX请求仍然会引发错误。将*更改为我计划在其上使用的实际域也不起作用。我在堆栈溢出中搜索了答案,并遇到了以下问题:
// Allow from any origin
if (isset($_SERVER['HTTP_ORIGIN'])) {
header("Access-Control-Allow-Origin: {$_SERVER['HTTP_ORIGIN']}");
header('Access-Control-Allow-Credentials: true');
header('Access-Control-Max-Age: 86400'); // cache for 1 day
}
// Access-Control headers are received during OPTIONS requests
if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD']))
header("Access-Control-Allow-Methods: GET, POST, OPTIONS");
if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']))
header("Access-Control-Allow-Headers: {$_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']}");
exit(0);
}
这也不起作用。
我以为我的.htaccess文件可能以某种方式影响了事情,所以我暂时将其删除,但是AJAX请求仍然说PHP文件中未设置Access-Control-Allow-Origin标头。
我在daniweb.com上找到了它:
https://www.daniweb.com/web-development/php/threads/461902/php-header-is-not-working-for-access-control-allow-origin
尚未解决。
如果确实已经设置了标头(以多种方式),那么AJAX请求又为什么会抛出错误,说明尚未设置标头?
最佳答案
通过AJAX请求发送的数据破坏了PHP脚本-导致其无法正确执行,我猜这阻止了标头的正确设置。
请注意以后所有对此的看法:我想这就是您的工具可能也无法正常工作的原因-并且很可能是为什么我在撰写本文之前查看过的主题从未得到回答的原因。诚然,这很尴尬。我猜没有人幻想自己在此之前做过一些愚蠢的事情。
确保在请求中发送的数据不会以某种方式导致PHP脚本无法执行。