【发布时间】:2014-09-13 21:13:15
【问题描述】:
我已经尝试了很多次来让这个工作,但似乎无法维持生计。
当我第一次实现这个时,它可以完美地处理一些请求,然后突然出现。它停止工作。
这是我从油脂/篡改猴子脚本运行的代码:
$.ajax({
url: 'ServerLinkHere',
crossDomain: true,
data: {
artist: artist,
track: title,
link: data.url
},
type: 'POST',
success: function (resp) {
console.log(resp.responseText);
}
});
这是我的服务器端脚本(来自用户 Ganesh 在另一个线程中感谢):
// 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);
}
在代码之后,我进行计算:下载一个文件,然后返回一个指向文件下载的链接作为正文。
目前,似乎正在运行计算,因为该文件确实出现在文件系统上。
但是,当它返回一个链接时,chrome 浏览器仍然会抛出访问控制错误。这是调试图(不能直接附上,不代表):
但是,我还将代理连接到 CharlesProxy 调试器,调试器显示一切正常。这是响应的图片:
这可能是预检问题吗?我没有发送OPTIONS。
【问题讨论】:
-
我已经正确设置了标题。它仍然不起作用。为了让您免于怀疑,我重新创建了相同的请求/响应解决方案,但它仍然返回相同的错误。
-
XMLHttpRequest 无法加载 xxxx。请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,Origin 'hypem.com' 不允许访问。我使用的是greasemonkey脚本,所以起源来自炒作
-
这个新信息很有趣。看起来问题完全出在服务器端。不知何故,标题未按您的意愿设置。您应该在检查工具 (firebug) 中找到一个选项卡,其中显示了响应标头。它们符合您的预期吗?
-
另外,避免将任何东西放入输出缓冲区。即使是空白也会妨碍您设置标题。一个典型的 PHP 错误是在设置标头之前在某个地方没有注意到空白。
标签: javascript php jquery ajax cors