我在REST服务器上遇到ajax GET请求问题。我做了一些测试,我会在这里发布。
在REST服务器中,我有两种方法:
这是在服务器上执行ajax请求的javascript代码(在resource_new_get方法上):
app.updateResources = function(data)
{
if(data == null)
{
$.ajax(
{
url: 'http://<remotehost>/api/events/resource_new?id_event=<ID>',
dataType: 'json',
success: function(d)
{
console.log(d);
},
error: function(error)
{
console.log('error ' + JSON.stringify(error));
}
});
}
else
{
...
}
};
在这种情况下,ajax请求运行正常,我可以从服务器获取json响应。
但是,当我按照以下方式对resource_api_new执行添加自定义标头的请求时:
app.updateResources = function(data)
{
if(data == null)
{
$.ajax(
{
url: 'http://<remotehost>/api/events/resource_api_new?id_event=<ID>',
dataType: 'json',
headers: {'Api-Key': '<my_token>'},
success: function(d)
{
console.log(d);
},
error: function(error)
{
console.log('error ' + JSON.stringify(error));
}
});
}
else
{
...
}
};
哪个需要由Api-Key&#39;标识的令牌?在标题中键入以返回json响应,错误函数触发并返回:
XMLHttpRequest cannot load http://<remotehost>/v2/index.php/api/events/resource_api_new?id_event=<ID>. Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://<myhost>' is therefore not allowed access. The response had HTTP status code 404.
当我在php文件的顶部添加包含REST Server的内容时,请输入以下行:
标题(&#39; Access-Control-Allow-Origin:*&#39;);
响应返回&#34;简单地&#34; HTTP状态代码404,如下所示:
XMLHttpRequest cannot load http://api.gtmasterclub.it/v2/index.php/api/eventi/relatori_api_new?id_evento=159. Response for preflight has invalid HTTP status code 404
答案 0 :(得分:0)
我找到了问题的解决方案:
Api-Key标头未包含在Access-Control-Allow-Headers中,我简单地添加了这个:
Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, Api-Key
另外,我添加了一个构造函数来处理OPTIONS请求,如下所述:
HTTP OPTIONS error in Phil Sturgeon's Codeigniter Restserver and Backbone.js
function __construct() {
parent::__construct();
$method = $_SERVER['REQUEST_METHOD'];
if($method == "OPTIONS") {
log_message('debug', 'method OPTIONS called');
die();
}
}
并且,在我删除的客户端脚本中:
data-type: 'json',