Javascript 通过';的问题';在URL中调用ajax
我正在尝试创建一个对weatherunderground的Ajax调用。 代码是:Javascript 通过';的问题';在URL中调用ajax,javascript,jquery,ajax,Javascript,Jquery,Ajax,我正在尝试创建一个对weatherunderground的Ajax调用。 代码是: $(".city").autocomplete({ source: function( request, response ) { $.ajax({ // GET http://autocomplete.wunderground.com/aq?query=San%20F url: "http://autocomplete.wunderground.com/aq?qu
$(".city").autocomplete({
source: function( request, response ) {
$.ajax({
// GET http://autocomplete.wunderground.com/aq?query=San%20F
url: "http://autocomplete.wunderground.com/aq?query=",
dataType: "jsonp",
data: {
featureClass: "P",
style: "full",
maxRows: 12,
name_startsWith: request.term
},
success: function( data ) {
response( $.map( data.RESULTS, function( item ) {
return {
label: item.name + item.countryName,
value: item.name
};
}));
}
});
},
minLength: 2,
select: function( event, ui ) {
log( ui.item ?
"Selected: " + ui.item.label :
"Nothing selected, input was " + this.value);
},
open: function() {
$( this ).removeClass( "ui-corner-all" ).addClass( "ui-corner-top" );
},
close: function() {
$( this ).removeClass( "ui-corner-top" ).addClass( "ui-corner-all" );
}
});
无论我如何对待aq后面的问号,我都会得到一个“未捕获的SyntaxError:Unexpected token:”错误。如果我对数据进行编码?作为“?”我得到&?在生成的URL中。如果我移除了符号,请求功能正常。
如果我在整个字符串上使用encodeURL()或的encodeURL组件?结果是%3F,这也不起作用
我已经准备好了,有人知道该怎么办吗?这个错误实际上是由不匹配的参数名而不是
url中的?
引起的
有争议的参数是指定JSONP回调的参数:
http://.../aq?query=San%20F&callback=jQuery111___140___&ts=12345
// ^^^^^^^^
jQuery的默认名称是回调
:
要更改参数,可以在请求选项中包括jsonp:'cb'
$.ajax({
url: "http://autocomplete.wunderground.com/aq?query=San%20F",
dataType: "jsonp",
jsonp: 'cb',
// ...
});
例如:
而且,语法错误来自响应。如果没有cb
参数,服务将使用JSON响应,缺少使其成为JSONP的“填充”
{"RESULTS": ...}
// ^ syntax error
请注意,JSONP实际上是JavaScript,是通过
元素请求的。它只是利用了这两种语言在语法上的相似性。但是,它需要填充有效。谢谢您的帮助。(我知道我不该这么说,但无论如何……)
答案有两个方面:
如上所述,需要'jsonp:'cb'的回调行
以及数据部分,而不是:
name_startsWith: request.term
它需要:
query: request.term
我不理解数据部分的正确语法。在带有url:
的行前面添加类型:“GET”,
为什么不简单地将查询参数和其他所有内容一样放在数据对象中?@JayBlanchard:JSONP始终是GET。是的-我刚刚看到OP说的是“JSONP”@Bergi。我以前错过了。可能是重复的
name_startsWith: request.term
query: request.term