URL和回调参数

时间:2012-12-06 14:21:25

标签: javascript jquery ajax callback

网址中的&callback参数有什么作用?我问的原因是因为我使用jquery的$ .ajax函数运行查询,当我在url的末尾包含&callback=?时,我得到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=?的行,因为当我在查询中保留它时会返回错误: "message":"Invalid value for parameter callback: ?"

然而,在代码的早期,我使用相同的回调参数对google fusion表执行了类似的查询。

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

3 个答案:

答案 0 :(得分:0)

了解Query Strings

他们以?开头,其他参数与&连接在一起。除非编码,否则?永远不应该是字符串的开头。

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

例如:

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

您的网络服务器可能在某处阻塞了查询字符串。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

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

e.g。

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

会给你

asdf([1,2,3]);
显然,JSON-P要求服务器支持发送JSON-P响应。如果您尝试使用jQuery执行跨源请求,它将(默认情况下)修改请求,前提是服务器将支持具有通常约定的JSON-P。