Javascript 从Google Fusion表获取请求时遇到问题

Javascript 从Google Fusion表获取请求时遇到问题,javascript,jquery,google-api,google-fusion-tables,Javascript,Jquery,Google Api,Google Fusion Tables,我在使用HTTP请求查询Google Fusion表时遇到了问题。如果我将下面查询中的URL粘贴到浏览器中,它会返回一个逗号分隔的列表。但是,当我使用下面的.get函数执行此操作时,数据参数中不会返回任何内容 我对这方面还不太熟悉,所以任何帮助都将不胜感激 function query(){ var jqxhr=$.get( "https://www.google.com/fusiontables/api/query?sql=SELECT+Address+FROM+914142+WHER

我在使用HTTP请求查询Google Fusion表时遇到了问题。如果我将下面查询中的URL粘贴到浏览器中,它会返回一个逗号分隔的列表。但是,当我使用下面的.get函数执行此操作时,数据参数中不会返回任何内容

我对这方面还不太熟悉,所以任何帮助都将不胜感激

function query(){
var jqxhr=$.get(
    "https://www.google.com/fusiontables/api/query?sql=SELECT+Address+FROM+914142+WHERE+IsCustomer+%3D+1",
    function success(data, textStatus){
alert(data);})}

您可能会因为以下原因而无法访问Google fusion表

解决此问题的一些方法是通过自己的服务器代理请求(与所服务的页面在同一域上运行)或请求中的数据

如果将参数
jsonCallback=
附加到Fusion Tables请求中,那么将得到一个JSONP响应。例如,请求:

https://www.google.com/fusiontables/api/query?sql=SELECT+Address+FROM+914142+WHERE+IsCustomer+%3D+1&jsonCallback=foo
结果:

foo({"table":{"cols":["Address"],"rows":[["3400 California Street, Suite 302, San Francisco, CA 94118"],["1200 Pacific Avenue, San Francisco, CA 94109"],["340 10TH Street, San Francisco, CA 94103"],["One Embarcadero Center, Lobby Level, San Francisco, CA 94111"],["2230 Third Street, San Francisco, CA 94107"],["490 Post St, Suite 430, San Francisco, CA 94102"],["530 Bush St. Suite 101, San Francisco, CA 94108"],["114 Sansome Street, Suite 715, San Francisco, CA 94104"],["3012 Steiner Street Suite A, San Francisco, CA 94123"],["199 Fremont St # 105, San Francisco, CA 94105"],["2007 Irving St., San Francisco, CA 94122"],["450 Sutter Suite 2518, San Francisco, CA 94108"],["275 Gough Street, San Francisco, CA 94102"],["450 Sutter Street Suite 1225, San Francisco, CA 94108"],["2675 Geary Blvd., Ste 400, San Francisco, CA 94118"],["332 Pine St # 505, San Francisco, CA 94104"]]}})

IBM的这篇文章将帮助您理解JSONP以及如何使用它:

像这样使用JSONP和fusion:

function processData(json){
  for (var i, row; row=json.table.rows[i]; i++){
    console.log(row)
  }
}

script = document.createElement("SCRIPT")
script.src = "https://www.google.com/fusiontables/api/query?sql=SELECT+Address+FROM+914142+WHERE+IsCustomer+%3D+1&jsonCallback=processData";
document.getElementsByTagName("HEAD")[0].appendChild(script);

没有经过测试,你知道吗?不知道您的库是否支持任何有用的抽象

当我想到这一点时,我意识到通过您自己的服务器运行请求最简单的方法就是假装它是您自己的请求,即存储在一个文件中

所以我刚刚创建了一个php脚本,其中包含了我自己域中的内容

<?php echo file_get_contents('http://www.sameoriginpolicydomain.com'); ?>

这就成功了,要么从AJAX调用,要么直接调用。以下是您要查找的内容:

<?php echo file_get_contents('http://www.google.com/fusiontables/exporttable?query='.urlencode($_GET['query']).'&o=kmllink&g='.$_GET['g']); ?>

不久前,我一直在努力解决这个问题,就在今天下午,我还在讨论如何处理Fusion表查询

简言之,Mark对同源策略()的看法完全正确,除了一个细节之外,他的解决方案也差不多——您需要使用$.get指定“jsonp”数据类型。请继续阅读

根据您最初的示例,这应该是可行的:

function query(){
    var queryurl = "<your query url>";
    querytail = "&jsonCallback=?";

    var jqxhr=$.get(queryurl + querytail, queryHandler, "jsonp")
}

function queryHandler(data) {
    // display the first row of retrieved data
    alert(data.table.rows[0]);
}
函数查询(){
var queryurl=“”;
querytail=“&jsonCallback=?”;
var jqxhr=$.get(queryurl+querytail,queryHandler,“jsonp”)
}
函数查询句柄(数据){
//显示检索到的第一行数据
警报(data.table.rows[0]);
}

虽然noiv11的答案确实有效,但它不包括那些想知道如何使用JSONP管理头的人的授权。为此,您需要使用真正的头来检索数据,因此这需要对cURL做一些工作,因此需要通过服务器来完成

下面是一个有用的PHP类,它实现了这一点:

NB刚刚宣布了Fusion表的名称。