English 中文(简体)
Trouble with Get request from Google Fusion tables
原标题:

I ve been having trouble querying the Google Fusion Tables using an HTTP request. If I paste the URL from the query below in the browser, it comes back with a commas separated list. However, when I do this with the .get function as below, nothing comes back in the data parameter.

I m fairly new at this, so any help would be appreciated.

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);})}
问题回答

I was struggling with this a while back, and just this afternoon posted sample code and a working example of how to handle Fusion Tables queries.

In a nutshell, Mark is exactly right about the same origin policy (http://en.wikipedia.org/wiki/Same_origin_policy), and was just about there with his solution aside from one detail - you need to specify "jsonp" datatype with $.get. Read on at the jQuery .get page.

Based on your original example, this should work:

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]);
}

Use JSONP and fusion like this:

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);

Not tested, you ll got the idea? Don t know whether your lib supports any useful abstraction.

You likely being prevented from accessing Google fusion tables due to the Same Origin Policy.

Some ways to solve this is to proxy the request through your own server (running on the same domain as the page you are serving) or requesting the data in JSONP.

If you append the parameter jsonCallback=<callback name here> to your Fusion Tables request, then you will get a JSONP response. For example, the request:

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

results in:

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"]]}})

This article from IBM should help get you understand JSONP and how to work with it: http://www.ibm.com/developerworks/library/wa-aj-jsonp1/

When I thought about this I realised that the easiest way to run the request through your own server would be to literally pretend it was your own request i.e. in a file stored.

So I just created a php script that included the contents on my own domain

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

And that did the trick, either calling it from AJAX or directly. Here s what you re looking for:

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

While noiv11 s answer does work, it doesn t cover authorization for those wondering as you can t manage the headers with JSONP. For this you will need to use real headers to retrieve the data so this will require a little work with cURL and therefore need to be done via a server.

Here s a helpful PHP class that does the trick: Fusion Tables Client PHP





相关问题
selected text in iframe

How to get a selected text inside a iframe. I my page i m having a iframe which is editable true. So how can i get the selected text in that iframe.

How to fire event handlers on the link using javascript

I would like to click a link in my page using javascript. I would like to Fire event handlers on the link without navigating. How can this be done? This has to work both in firefox and Internet ...

How to Add script codes before the </body> tag ASP.NET

Heres the problem, In Masterpage, the google analytics code were pasted before the end of body tag. In ASPX page, I need to generate a script (google addItem tracker) using codebehind ClientScript ...

Clipboard access using Javascript - sans Flash?

Is there a reliable way to access the client machine s clipboard using Javascript? I continue to run into permissions issues when attempting to do this. How does Google Docs do this? Do they use ...

javascript debugging question

I have a large javascript which I didn t write but I need to use it and I m slowely going trough it trying to figure out what does it do and how, I m using alert to print out what it does but now I ...

Parsing date like twitter

I ve made a little forum and I want parse the date on newest posts like twitter, you know "posted 40 minutes ago ","posted 1 hour ago"... What s the best way ? Thanx.

热门标签