我正在尝试使用我的codeigniter应用程序中的AJAX请求。 在我的codeigniter控制器功能结束时,我添加了
public somefunction(){
$this->output->set_header('Access-Control-Allow-Origin: *');
$this->output->set_header('Access-Control-Allow-Methods: GET, POST, OPTIONS, PUT, DELETE');
$this->output->set_content_type('application/json');
// plan contains array
return $this->output->set_output(json_encode($plan));
}
Normal get request works via server to server, but AJax calls shows the error.
XMLHttpRequest cannot load localhost:8888. Request header field Content-Type is not allowed by Access-Control-Allow-Headers in preflight response.
这是ajax调用
self.information = function() {
$.ajax({
type: 'GET',
url: '',
contentType: 'application/json; charset=utf-8'
})
.done(function(result) {
console.log(result);
})
.fail(function(xhr, status, error) {
alert(error);
})
.always(function(data){
});
}
网址有效,因为我用邮递员检查了它,我得到了返回的数据。所以没问题。
答案 0 :(得分:0)
我今天遇到了同样的问题,对我有用的是定义index_options方法
public function index_options() {
return $this->response(NULL, REST_Controller::HTTP_OK);
}
并将构造函数更新为此
public function __construct(){
parent::__construct();
header('Access-Control-Allow-Origin: *');
header("Access-Control-Allow-Headers: X-API-KEY, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method");
header("Access-Control-Allow-Methods: GET, POST, PUT, DELETE");
}
不幸的是,我对访问控制不够熟悉,无法解释为什么这对我有用。希望这会有所帮助。