我在试着找回雅虎自动补全功能。
雅虎的JSON url是:http://ff.search.yahoo.com/gossip?output=fxjson&command=query
所以我有:
$("selector").autocomplete({
source: function( request, response ) {
$.ajax({
url: "http://ff.search.yahoo.com/gossip",
dataType: "jsonp",
data: {
"output" : "fxjson",
"command" : request.term
},
success: function( data ) {
response(data[1])
}
})
}
});下面是一个例子:http://jsfiddle.net/yQbdb/
有人能发现一个错误或者我做错了什么吗?应该能行得通。
谢谢
发布于 2011-12-05 11:52:32
将output设置为jsonp对我来说很有效。
有关输出的结构,请参见example query。
解释如下。
代码是。
$("#wd6450").autocomplete({
source: function(request, response) {
$.ajax({
url: "http://ff.search.yahoo.com/gossip",
dataType: "jsonp",
data: {
"output": "jsonp",
"command": request.term
},
success: function(data) {
var suggestions = [];
// for each element in the data.gossip.results array ...
$.each(data.gossip.results, function(i, val) {
// .. push the value of the key inside our array
suggestions.push(val.key);
});
// call response with our collected values
response(suggestions);
}
});
}
});说明:
通过使用dataType: "jsonp",jQuery期望输出格式为JSONP。当您使用output: "fxjson"从代码中进行调用时,URL看起来像,但是正如您所看到的,输出不是有效的JSONP,因为回调没有被调用。
另一方面,当您指定output: "jsonp"时,查询看起来像,正如您所看到的,输出是一个有效的JSONP -回调被调用。
您在评论中链接了一个Amazon示例。$.ajax()调用将尝试像一样访问URL。Amazon的webservice的输出是有效的JSONP,因为回调是用所有数据调用的。
因此,结果是:如果您通过使用output: "jsonp"配置$.ajax()在URL中提供?output=jsonp参数,Yahoo webservices将以JSONP格式返回。默认情况下,Amazon的webservice返回此格式,没有任何额外的参数。这是特定于with服务的配置,必须参考其文档或其他相关资源。
有关JSONP可用的信息。
https://stackoverflow.com/questions/8380623
复制相似问题