Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 允许通过AJAX访问我的API_Javascript_Php_Angularjs_Cors_Fuelphp - Fatal编程技术网

Javascript 允许通过AJAX访问我的API

Javascript 允许通过AJAX访问我的API,javascript,php,angularjs,cors,fuelphp,Javascript,Php,Angularjs,Cors,Fuelphp,我有一个在服务器上获取日期的API public function post_events() { header('Access-Control-Allow-Origin: *'); header('Access-Control-Allow-Methods: GET, POST'); header("Access-Control-Allow-Headers: X-Requested-With"); $city = Input::post('city','all'

我有一个在服务器上获取日期的API

public function post_events()
{
    header('Access-Control-Allow-Origin: *');
    header('Access-Control-Allow-Methods: GET, POST');
    header("Access-Control-Allow-Headers: X-Requested-With");

    $city = Input::post('city','all');
    $c = Model_chart::format_chart($city);
    return $this->response($c);
}
它在通常的旋度方法中工作良好。但是我尝试在Angular.js上使用$http访问它,它会导致这个错误

无法加载XMLHttpRequest . 不 “Access Control Allow Origin”标头出现在请求的服务器上 资源。因此,不允许使用源“” 进入

如您所见,我已经在函数中添加了标题。我还检查了curl,并且在调用api时附加了头访问控制Allow Origin

这里有我遗漏的东西吗

更多信息:这是通过普通卷曲返回给我的标题信息

Remote Address:104.28.19.112:80
Request URL:http://event.deremoe.com/vendor/events.json
Request Method:OPTIONS
Status Code:404 Not Found

Request Headersview source
Accept:*/*
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8
Access-Control-Request-Headers:accept, content-type
Access-Control-Request-Method:POST
Connection:keep-alive
Host:event.deremoe.com
Origin:http://app.event.chart
Referer:http://app.event.chart/
User-Agent:Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.120 Safari/537.36

Response Headersview source
CF-RAY:16f687416fe30c35-SEA
Connection:keep-alive
Content-Encoding:gzip
Content-Type:text/html; charset=UTF-8
Date:Thu, 25 Sep 2014 10:27:17 GMT
Server:cloudflare-nginx
Set-Cookie:__cfduid=d1a9e4283faacc0a2b029efef586b6b931411640837342; expires=Mon, 23-Dec-2019 23:50:00 GMT; path=/; domain=.deremoe.com; HttpOnly
Transfer-Encoding:chunked
X-Powered-By:PHP/5.4.30

浏览器首先对您的api进行飞行前选项调用,这就是它触发错误的原因:
访问控制允许原点
。您可以在api上创建一个端点,该端点接受所有选项请求,并且还必须像post事件一样在此处设置头:

header('Access-Control-Allow-Origin: *');

您还收到的状态代码为404未找到。这意味着无法找到选项端点。

如果标题设置正确,您可以检查ajax调用的网络响应吗?@johnSmith我该怎么做。。。我在上面添加了响应。您的ajax请求是否跨域?如果是这样的话,您需要使用jsonp并将响应包装在提供的回调中(如果存在的话),以便在通过cURL访问时不会出现混乱,这样它才能work@martincarlin87如何检查?@MrA例如,在chrome中,您可以打开开发者工具栏,然后打开网络选项卡,在那里您将看到请求和响应,当你点击它时,你会看到请求/响应标题,所以我必须添加标题('Access-Control-Allow-Methods:GET,POST','OPTIONS')?您能提供更多的解释吗?我想您上面发布的代码片段与端点匹配。让我们假设/events with POST方法与您的函数匹配。当您试图在收到POST请求之前从浏览器执行此ajax调用时,您将在/events处收到一个选项请求。您必须在API中定义与以下函数匹配的选项/事件端点:
public function OPTIONS_events(){header('Access-Control-Allow-Origin:');}
这里还可以查看特定于angular的选项: