Javascript:跨域JSON请求问题

时间:2011-07-29 11:51:27

标签: php javascript json cross-domain

我正在尝试从Google Places API请求JSON,但在首先包含以下内容后,我仍然遇到跨域请求错误:

<?php 
header('Access-Control-Allow-Origin: *');
header("Access-Control-Allow-Methods: POST, GET");
header("Access-Control-Allow-Headers: x-requested-with");
?>

我使用的JSON请求是标准的JQuery:

function load() {
    var url = 'https://maps.googleapis.com/maps/api/place/details/json?reference=CnRhAAAARMUGgu2CeASdhvnbS40Y5y5wwMIqXKfL-n90TSsPvtkdYinuMQfA2gZTjFGuQ85AMx8HTV7axABS7XQgFKyzudGd7JgAeY0iFAUsG5Up64R5LviFkKMMAc2yhrZ1lTh9GqcYCOhfk2b7k8RPGAaPxBIQDRhqoKjsWjPJhSb_6u2tIxoUsGJsEjYhdRiKIo6eow2CQFw5W58&sensor=true&key=xxxxxxxxxxxxxx';
    $.ajax(url, {
       async:   true,
       success: function(data, textStatus, jqXHR) {
           dump(data);
       }
    });
}

我会使用JSONP查询,但Google Places API不支持JSONP ...我该如何解决这个问题?使用代理服务器?我不知道该怎么做或我做错了什么。

1 个答案:

答案 0 :(得分:4)

您从请求数据的网址必须授予访问控制标头的权限。它会打败同一起源政策的对象,远程起源可以授予自己的权限!

如果您使用的API未提供JSON-P API,并且本身未设置访问控制标头,则需要使用代理。您自己运行的,或者将转换为JSON-P的第三方(例如YQL)。