2

URL中的&callback参数有什么作用?我问的原因是因为我正在使用 jquery 的 $.ajax 函数运行查询,并且当我包含&callback=?在 url 的末尾时,我得到一个 400(错误请求)错误。

这是我的javascript代码:

var energy_query_array = [];


var masterEnergyTable_tableid = '145TOXaanydD63tvgVMmCVH0hei0NXNCEK8ekZBg';
var current_date = 'Jan-12';

var energy_query = 'SELECT * FROM ' + masterEnergyTable_tableid; 

var encoded_energy_query = encodeURIComponent(energy_query);
var energy_url = ['https://www.googleapis.com/fusiontables/v1/query'];
energy_url.push('?sql=' + encoded_energy_query);
energy_url.push('&key=' + apiKey); 
//energy_url.push('&callback=?');
$.ajax({
url: energy_url.join(''),
datatype: 'jsonp',
success: function(data) {
           var name_array = data['columns'];
           var data_array = data['rows'][0];
       for(var i = 1; i < data['columns'].length; i++) {
        energy_query_array[name_array[i]] = data_array[i];
       }
     }
});

console.log(energy_query_array);

我已经注释掉了我添加&callback=?到 url 的行,因为当我将它留在查询中时会返回错误: "message":"Invalid value for parameter callback: ?"

但是,在前面的代码中,我使用相同的回调参数对 google 融合表执行了类似的查询。

代码末尾的 console.log 调用向控制台显示一个空数组。

4

3 回答 3

2

回调用于 JSONP 请求,这意味着在执行跨域请求以获取 JSON 数据时不使用。它不使用 XHR 包装器,而是使用脚本标记,然后传递一个回调查询字符串参数,该参数指向用于执行传递内部所有 JSON 数据的函数。这样,您可以拥有一个不知道您的应用程序如何工作的数据点,但是当您传入回调时,它将触发一个带有数据的函数。这允许您从任何浏览器使用它的 API。

于 2012-12-06T14:25:21.030 回答
1

与查询字符串中的任何其他数据(或主机名和片段 ID 之间的任何其他数据)一样,它向服务器提供一些数据。含义完全由该服务器上运行的软件决定。

有一个约定用作callback值的键,该值将用作函数的名称,以在 RESTful API 中的 JSON-P 响应中调用。JSON-P是一种为不支持 CORS 的浏览器提供可跨来源访问的 Web 服务的方法。

例如

http://example.com/foo?callback=asdf

会给你

asdf([1,2,3]);

JSON-P 显然要求服务器支持发送 JSON-P 响应。如果您尝试使用 jQuery 执行跨域请求,它将(默认情况下)修改请求,假设服务器将支持 JSON-P 并具有通常的约定。

于 2012-12-06T14:26:44.870 回答
0

阅读查询字符串

它们以 开头?,其他参数与&. ?除非它被编码,否则它永远不应该是字符串的开头。

然后,服务器可以使用键值对,因为这是执行标准 GET 请求的方式。

例如:

http://myserver.com?name=josh&age=24&state=il

您的 Web 服务器可能在某处被查询字符串阻塞。

于 2012-12-06T14:24:47.807 回答