如何从客户端向服务器发送跨域请求?

时间:2014-11-18 17:38:21

标签: javascript jquery

我正在使用Google Drive API,但在从客户端检索数据时出现此错误:

XMLHttpRequest cannot load url.  No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost' is therefore not allowed access. 

请注意,我不允许更改标题。

有没有办法请求跨域?

var req = {
    action: 'getFiles',
};  

this.getJSON('drive.php', req, function(serverData)
{
    console_log(serverData);

});

上面的代码给出了这个错误。我该如何解决这个问题?

一个选项:

var url = 'drive.php';


$.ajax({
   type: 'GET',
    url: url,
    async: false,
    jsonpCallback: 'jsonCallback',
    data: {action: 'getFiles'},
    contentType: "application/json",
    dataType: 'jsonp',
    success: function(json) {
       console.dir(json.sites);
    },
    error: function(e) {
       console.log(e.message);
    }
});

仍然会出现GET错误

3 个答案:

答案 0 :(得分:0)

您可以使用JSONP发出请求;请参阅以下示例。 http://www.sitepoint.com/jsonp-examples/

该网站的一个例子:

(function($) {
var url = 'http://www.jquery4u.com/scripts/jquery4u-sites.json?callback=?';


    $.ajax({
       type: 'GET',
        url: url,
        async: false,
        jsonpCallback: 'jsonCallback',
        contentType: "application/json",
        dataType: 'jsonp',
        success: function(json) {
           console.dir(json.sites);
        },
        error: function(e) {
           console.log(e.message);
        }
    });

    })(jQuery)

;

答案 1 :(得分:0)

不是真的。出于安全原因,不允许跨域请求。你能做的是以下几点:

编写一个PHP脚本,它只转发您的请求,并将此PHP脚本放在与JavaScript相同的服务器中。因此,您的JS将在域上执行请求,并且最终不会出现错误。

答案 2 :(得分:0)

在php中你需要

header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: POST/GET');

插入头文件.php,它允许客户端POST数据与方法POST / GET到服务器并从中获取接收器...