我收到XMLHttpRequest无法加载的错误,请求的资源上没有'Access-Control-Allow-Origin'标头。因此,不允许原点“http://abc”访问.. 我是php和codeigniter的新手,所以我真的不明白发生了什么。我尝试在stackoverflow中阅读其他材料,但它只是让我空白。如果这是一个重复的帖子,我很抱歉,但我真的需要帮助。
这是视图的ajax调用:
$("#btnLoginFB").click(function()
{
$.ajax({
type: "POST",
url: '<?php echo base_url();?>Main/login',
data: {domain:'FB'},
dataType: "text",
cache:false,
success:
function(output_string){
alert(output_string);
}
});
return false;
});
这是控制器中的功能
public function login()
{
$domain = $this->input->post('domain');
$get_domain = $this->input->get('domain');
$get_token = $this->input->get('token');
if ((!empty($get_domain)) && (!empty($get_token)))
{
$this->getmasterid();
}
else
{
$this->getticket($domain);
}
}
public function getsomething($domain)
{
if (isset($domain))
{
switch ($domain)
{
case 'PP':
$this->session->set_userdata('servcode','pp.login');
$this->session->set_userdata('servsiggy','adgjanlnadgakjdbakg');
$this->session->set_userdata('domain','pp');
break;
case 'FB':
$this->session->set_userdata('servcode','fb.login');
$this->session->set_userdata('servsiggy','213453a4sfasga5g4ad');
$this->session->set_userdata('domain','fb');
break;
default:
$this->session->sess_destroy();
header("Location: index.php");
break;
}
$this->session->set_userdata('clientpaddr', $this->input->server('REMOTE_ADDR'));
$this->session->set_userdata('partcode', 'abc');
$this->session->set_userdata('command', 'initialize-something');
$this->session->set_userdata('layout', 'deflt');
$this->session->set_userdata('title', 'pp login');
$this->session->set_userdata('captcha', 'false');
$this->session->set_userdata('keys', 'false');
$this->session->set_userdata('returnurl', 'https://mywebsite.game.com/login.php');
$this->session->set_userdata('cancelurl', 'https://mywebsite.game.com/cancel.php');
$this->session->set_userdata('sendurl', 'http://192.168.0.1/authenticate/green/api.ashx');
}
else
{
$this->session->sess_destroy();
header("Location: index.php");
}
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $this->session->userdata('sendurl'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, true);
$data = array(
'part_code' => $this->session->userdata('partcode'),
'serv_code' => $this->session->userdata('servcode'),
'serv_siggy' => $this->session->userdata('servsiggy'),
'command' => $this->session->userdata('command'),
'ip' => $this->session->userdata('clientpaddr'),
'domain' => $this->session->userdata('domain'),
'layout' => $this->session->userdata('layout'),
'required_captcha' => $this->session->userdata('captcha'),
'required_keys' => $this->session->userdata('keys'),
'return_url' => $this->session->userdata('returnurl'),
'cancel_url' => $this->session->userdata('cancelurl')
);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$output = curl_exec($ch);
curl_close($ch);
$output = explode("&", $output);
$redirect_url= urldecode($output[4]);
$str_len_cut = strlen("redirect_url=");
$result_url = substr($redirect_url,$str_len_cut);
header('Location: '.$result_url);
}
答案 0 :(得分:5)
在控制器中,将php脚本顶部的 Access-Control-Allow-Origin 设置为原始标头的预期值,即ajax调用的域:
header('Access-Control-Allow-Origin: abc');
或者,如果您从不使用凭据而不关心请求的来源,请使用通配符:
header('Access-Control-Allow-Origin: *');
<强>声明强>
我认为我没有正确地认为这是在codeigniter下完成的,现在在我看来这个答案非常糟糕。
答案 1 :(得分:1)
我也遇到了同样的问题。请记住你必须把
header('Access-Control-Allow-Origin: *');
在另一边。
例如,您从
请求ajaxhttp://example.net
到http://example2.net/login
所以你必须将上面的代码放在http://example2.net/login
个文件中。
答案 2 :(得分:0)
在代码点火器中,执行此操作的方法是使用output class。因此,您可以将其放在您需要的任何位置。
private string[] säten = new string[24];
private int Antal_passagerare = 0;
public void Run()
{
bool continue = true;
while(continue)
{
string menu = (Console.ReadLine());
int tal = Convert.ToInt32(menu);
switch(tal)
{
case 1:
Add_passagerare;
break;
case 2:
break;
case 3:
break;
}
}
}
请注意:将$this->output
->set_header('Access-Control-Allow-Origin: some-origin')
->set_header('Access-Control-Allow-Methods: GET, OPTIONS')
设置为Access-Control-Allow-Origin:
通常是不明智的做法,除非您确实希望允许来自任何域的请求。否则,仅允许来自运行您的应用程序的域的请求会更安全。有关here的更多信息。