使用 jQuery Ajax 和 PHP 的 CORS 请求
Posted
技术标签:
【中文标题】使用 jQuery Ajax 和 PHP 的 CORS 请求【英文标题】:CORS Request with jQuery Ajax & PHP 【发布时间】: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
。
【问题讨论】:
你的答案在这里:***.com/questions/20442628/cors-jquery-ajax-request 我已经正确设置了标题。它仍然不起作用。为了让您免于怀疑,我重新创建了相同的请求/响应解决方案,但它仍然返回相同的错误。 XMLHttpRequest 无法加载 xxxx。请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,Origin 'hypem.com' 不允许访问。我使用的是greasemonkey脚本,所以起源来自炒作 这个新信息很有趣。看起来问题完全出在服务器端。不知何故,标题未按您的意愿设置。您应该在检查工具 (firebug) 中找到一个选项卡,其中显示了响应标头。它们符合您的预期吗? 另外,避免将任何东西放入输出缓冲区。即使是空白也会妨碍您设置标题。一个典型的 php 错误是在设置标头之前在某个地方没有注意到空白。 【参考方案1】:尝试注释掉您的服务器端脚本(只是回显一些虚拟字符串以进行调试),然后将其添加到您的 htaccess:
SetEnvIf Origin ^(.*)$ ORIGIN_DOMAIN=$0
<Files "*">
Header add Access-Control-Allow-Origin %ORIGIN_DOMAINe
Header add Access-Control-Allow-Methods "GET, POST, OPTIONS"
Header add Access-Control-Allow-Headers "Authorization, X-Requested-With, Content-Type, Origin, Accept"
Header add Access-Control-Allow-Credentials "true"
</Files>
【讨论】:
我编辑了文件以仅输出一个 html hi 并注释掉其余代码。我的 .htaccess 文件已被编辑,因此它反映了您的。从 jsfiddle 请求时仍然不起作用 除了通常的 xmlhttprequest 无法加载之外,没有其他错误...... Chrome 控制台中没有访问控制 bla bla bla。我注意到的一件奇怪的事情是,调试我的问题的人重新创建了他的请求,并且当我访问该页面时它对他有用。它没有用。这可能是客户端问题吗? 如果有人想知道,我把它放在我的服务器端 .htaccess 中,在那里我收到了 CORS Request denied 错误并修复了它。以上是关于使用 jQuery Ajax 和 PHP 的 CORS 请求的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 php jquery ajax 上传文件和插入数据