我正在重写我的php代码并在调用我的restfull服务时使用jquery。我遇到了一个问题,在请求的资源上出现“No'Access-Control-Allow-Origin'标头...”错误。据我所知,如果您从其他域调用您的Web服务,这应该只会发生。这可能不是这里的原因,因为我从之前的相同域名调用它。
我的旧php功能看起来像这样
public function login($email, $password)
{
$curl = curl_init(LOGIN);
$curl_post_data = array('email' => $email,'password' => $password);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($curl_post_data));
$curl_response = curl_exec($curl);
if ($curl_response === false)
{
$info = curl_getinfo($curl);
curl_close($curl);
die('error occured during curl exec. Additioanl info: ' . var_export($info));
}
curl_close($curl);
$decoded = json_decode($curl_response,true);
if(!isset($_SESSION['loggedin']))
{
if($decoded[error]==false)
{
$_SESSION['loggedin'] = 1;
$_SESSION['email'] = $decoded['email'];
$_SESSION['name'] = $decoded['name'];
$_SESSION['api_key'] = $decoded['apiKey'];
}
}
}
我的新重写函数如下所示:
$('#contactForm').submit(function()
{
var formData = {
"email" : $('input[name=email]').val(),
"password" : $('input[name=pwd]').val()
};
var ValidJSON = JSON.stringify(formData);
$.ajax({
type : 'POST', // define the type of HTTP verb we want to use (POST for our form)
url : 'http://xxx.xxx.dk/v1/login', // the url where we want to POST
data : ValidJSON, // our data object
contentType: "application/json; charset=utf-8",
dataType : 'json', // what type of data do we expect back from the server
success: function (data, status, jqXHR) {
alert("success");},
error: function (jqXHR, status) {
alert("failed");
}
})
});
我错过了什么吗?
答案 0 :(得分:1)
此错误表示您提供服务,而您的网页不在同一来源。 规范说相同的起源意味着:
更多细节可以在维基百科页面http://en.wikipedia.org/wiki/Same-origin_policy
中找到因此,如果您无权访问服务代码/无法添加标题Access-Control-Allow-Origin: *
然后你必须通过你的php代理服务:
网页/ jquery ==> php ==>您的服务
答案 1 :(得分:0)
把
header("Access-Control-Allow-Origin: *");
在PHP代码的开头。