服务器不会返回启用 CORS 的 AJAX GET 请求
Posted
技术标签:
【中文标题】服务器不会返回启用 CORS 的 AJAX GET 请求【英文标题】:Server will not return AJAX GET request with CORS enabled 【发布时间】:2013-04-10 22:56:16 【问题描述】:我正在尝试启用外部资源以向我的服务器发出 GET 请求。现在我只是在我的个人服务器上通过godaddy托管来测试它。这可能是个问题吗?
我在尝试向其发出请求的页面上有以下代码
//page.php
<?php
header("Content-Type: application/json")
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET');
include_once 'php_dom/simple_html_dom.php';
include_once 'phpQuery.php';
if(isset($_GET['item']))
echo json_encode(array("data" => $_GET['item']));
else
echo json_encode(array("Error"=>"No item provided"));
我尝试发出这样的请求(显然是我的 URL),但我没有收到任何回复。
$.getJSON("http://www.example.com/page.php?item=123&format=json&callback=?", function(data)
alert(data);
);
Chrome 开发者显示一个成功的请求,但没有返回任何内容。我做错了什么吗?
【问题讨论】:
为了测试,添加else echo json_encode(array("Error"=>"No item provided"));
。另外,不要忘记设置适当的 Content-Type 标头...header("Content-Type: application/json")
这至少应该确定是否正在调用脚本并且这是一个逻辑错误,或者您是否没有得到任何响应。顺便说一句,网络选项卡是否显示带有空正文的 http 200 响应或???
您从什么来源发出请求?是来自本地文件还是其他服务器?
我正在本地主机上运行服务器,向我的“实际”服务器发出请求。
@Basic 我更新了上面的代码。还是什么都没有。
【参考方案1】:
当您使用callback=?
时,响应将作为 JSONP 处理。试试这样的:
if(isset($_GET['item']) && isset($_GET['callback']))
echo $_GET['callback'].'('.json_encode(array("data" => $_GET['item'])).');';
...或省略回调参数。
【讨论】:
我以为回调=?如this post 所述,必须触发 JSONP +1 不错的收获,我错过了。 @user1443519 对于 没有 具有Access-Control-Allow
标头的 x 域请求,JSONP 是必需的
那么,这意味着我需要它吗?我是新手,所以我不确定我是否正确解释它。考虑到它不起作用,显然有问题。
@Basic,为什么 OP 的原始代码 不 工作,因为它确实有 CORS 标头?
@user1443519:您不需要 JSONP,因为您将 Access-Control-Allow-Origin
-header 设置为 '*',但是当您使用回调参数时,响应应该是 JSONP。跨度>
以上是关于服务器不会返回启用 CORS 的 AJAX GET 请求的主要内容,如果未能解决你的问题,请参考以下文章
Bottle Py:为 jQuery AJAX 请求启用 CORS
如何为 nodejs Express 服务器启用 CORS?
启用从 jQuery ajax 到不在 IIS 中托管的 WCF 服务的 CORS POST
如何使用 Web 服务和 jQuery Ajax 启用 CORS