使用jquery调用restful服务

时间:2014-12-21 01:20:56

标签: php jquery ajax

我正在重写我的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");
     }
    })
});

我错过了什么吗?

2 个答案:

答案 0 :(得分:1)

此错误表示您提供服务,而您的网页不在同一来源。 规范说相同的起源意味着:

  • 相同方案(http / https)
  • 相同的主机(在您的情况下不一样,sub1.host.com和sub2.host.com不是同一个主机)
  • 相同端口

更多细节可以在维基百科页面http://en.wikipedia.org/wiki/Same-origin_policy

中找到

因此,如果您无权访问服务代码/无法添加标题Access-Control-Allow-Origin: * 然后你必须通过你的php代理服务:

网页/ jquery ==> php ==>您的服务

答案 1 :(得分:0)

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

在PHP代码的开头。