#javascript #jquery #google-api #google-fusion-tables
#javascript #jquery #google-api #google-fusion-tables
Вопрос:
У меня возникли проблемы с запросом таблиц 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 = 1",
function success(data, textStatus){
alert(data);})}
Ответ №1:
Я некоторое время назад боролся с этим, и только сегодня днем опубликовал пример кода и рабочий пример того, как обрабатывать запросы Fusion Tables.
В двух словах, Марк совершенно прав в отношении той же политики происхождения (http://en.wikipedia.org/wiki/Same_origin_policy ), и был почти готов к его решению, за исключением одной детали — вам нужно указать тип данных «jsonp» с помощью $.get . Читайте дальше на странице jQuery .get.
Основываясь на вашем исходном примере, это должно сработать:
function query(){
var queryurl = "<your query url>";
querytail = "amp;jsonCallback=?";
var jqxhr=$.get(queryurl querytail, queryHandler, "jsonp")
}
function queryHandler(data) {
// display the first row of retrieved data
alert(data.table.rows[0]);
}
Комментарии:
1. ПРИМЕЧАНИЕ: только что был анонсирован jsonpAPI для Fusion Tables.
Ответ №2:
Используйте 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 = 1amp;jsonCallback=processData";
document.getElementsByTagName("HEAD")[0].appendChild(script);
Не тестировался, вы поняли идею? Не знаю, поддерживает ли ваша библиотека какую-либо полезную абстракцию.
Ответ №3:
Вероятно, вам не разрешен доступ к таблицам Google fusion из-за той же политики происхождения.
Некоторые способы решить эту проблему — передать запрос через прокси-сервер через ваш собственный сервер (работающий в том же домене, что и страница, которую вы обслуживаете) или запросить данные в JSONP.
Если вы добавите параметр jsonCallback=<callback name here>
к вашему запросу Fusion Tables, то вы получите ответ в формате JSONP. Например, запрос:
https://www.google.com/fusiontables/api/query?sql=SELECT Address FROM 914142 WHERE IsCustomer = 1amp;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 /
Ответ №4:
Когда я подумал об этом, я понял, что самый простой способ запустить запрос через ваш собственный сервер — это буквально притвориться, что это был ваш собственный запрос, то есть сохраненный в файле.
Итак, я только что создал 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']).'amp;o=kmllinkamp;g='.$_GET['g']); ?>
Ответ №5:
Хотя ответ noiv11 действительно работает, он не распространяется на авторизацию для тех, кому интересно, поскольку вы не можете управлять заголовками с помощью JSONP. Для этого вам нужно будет использовать реальные заголовки для извлечения данных, поэтому это потребует небольшой работы с cURL и, следовательно, должно быть выполнено через сервер.
Вот полезный PHP-класс, который делает трюк: Клиент Fusion Tables PHP