Проблема с получением запроса из таблиц Google Fusion - PullRequest
3 голосов
/ 31 мая 2011

У меня возникли проблемы при запросе таблиц Google Fusion с использованием HTTP-запроса.Если я вставлю URL-адрес из запроса ниже в браузере, он вернется с разделенным запятыми списком.Однако, когда я делаю это с помощью функции .get, как показано ниже, в параметре data ничего не возвращается.

Я довольно новичок в этом, поэтому любая помощь будет оценена.

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

Ответы [ 5 ]

6 голосов
/ 11 августа 2011

Я боролся с этим некоторое время назад, и только сегодня днем ​​ опубликовал пример кода и рабочий пример того, как обрабатывать запросы Fusion Tables.

Короче говоря, Марк совершенно прав насчет той же политики происхождения (http://en.wikipedia.org/wiki/Same_origin_policy),), и его решение было почти таким же, за исключением одной детали - вам нужно указать тип данных "jsonp" с помощью $ .get. Читать на странице jQuery .get .

Исходя из вашего исходного примера, это должно сработать:

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]);
}
0 голосов
/ 09 декабря 2011

Хотя ответ noiv11 работает, он не охватывает авторизацию для тех, кто интересуется, поскольку вы не можете управлять заголовками с помощью JSONP.Для этого вам потребуется использовать реальные заголовки для извлечения данных, так что для этого потребуется немного поработать с cURL и, следовательно, сделать это через сервер.

Вот полезный PHP-класс, который делает свое дело: Клиент Fusion Tables PHP

0 голосов
/ 31 мая 2011

Используйте 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);

Не проверено, у вас есть идея?Не знаю, поддерживает ли ваша библиотека какую-либо полезную абстракцию.

0 голосов
/ 22 июня 2011

Когда я подумал об этом, я понял, что самый простой способ выполнить запрос через ваш собственный сервер - это буквально притвориться, что это ваш собственный запрос, т.е. в файле, который хранится.

Итак, я только что создал скрипт 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']); ?>
0 голосов
/ 31 мая 2011

Вероятно, вам запрещен доступ к таблицам Google Fusion из-за Одинаковой политики происхождения .

Некоторые способы решить эту проблему - прокси-запрос через ваш собственный сервер (работающий в том же домене, что и страница, которую вы обслуживаете) или запрос данных в JSONP * 1008.*.

Если вы добавите параметр jsonCallback=<callback name here> к вашему запросу в 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 и как с ним работать: http://www.ibm.com/developerworks/library/wa-aj-jsonp1/

...