使用devbridge自动完成和wunderground自动完成API

Baz*_*ar6 4 jquery json autocomplete wunderground

我正在尝试使用devbridge jquery autocomplete lib来提取wunderground.com的自动完成API,而且我一直都在坚持.无论我是否将cb附加到serviceUrl,它都无法解析返回的json.响应的前缀是"{结果:[{ 我想要使​​用的数组数据 }]}".

当我使用文档中提供的自动完成代码时,它会显示"Uncaught SyntaxError:Unexpected token:"

当我将&cb = myresults应用于serviceUrl时,我得到"Uncaught ReferenceError:myresults is not defined"

我的代码是:

var options, a;
$(function(){
    options = {
        serviceUrl:'http://autocomplete.wunderground.com/aq?c=US&format=jsonp&cb=myresults',
        minChars: 7,
        dataType : "jsonp",
        transformResult: function(response) {
            response = JSON.parse(response);
                return {
                    suggestions: $.map(response.myData, function(dataItem) {
                        return { value: dataItem.name, data: dataItem.zmw };
                })
            };
        }
    };
    a = $('#autoLocation').autocomplete(options);
});
Run Code Online (Sandbox Code Playgroud)

wunderground API是:http ://www.wunderground.com/weather/api/d/docs?d = autocomplete -api devbridge autocomplete git是:https://github.com/devbridge/jQuery-Autocomplete 一个示例响应来自wunderground的是:http://autocomplete.wunderground.com/aq c = US&format = jsonp&cb = myresults&query = sun%20f

我已经茫然几天了,我确信我正在寻找一些非常简单的东西.非常感谢任何帮助或指导.

Tom*_*rda 8

要使这个工作,您需要修改源代码,因为jquery jsonp默认的callaback查询字符串键不是"cb",而是"回调".所以在自动完成源中添加:jsonp:'cb'

        that.currentRequest = $.ajax({
            url: serviceUrl,
            data: params,
            type: options.type,
            jsonp: 'cb',
            dataType: options.dataType
        }).done(function (data) {
Run Code Online (Sandbox Code Playgroud)

那你的代码应该是:

var options, a;

$(function(){
    options = {
        serviceUrl:'http://autocomplete.wunderground.com/aq?c=US&format=jsonp',
        minChars: 2,
        dataType : "jsonp",
        transformResult: function(response) {
                console.log('response', response);
                return {
                    suggestions: $.map(response.RESULTS, function(dataItem) {
                        return { value: dataItem.name, data: dataItem.zmw };
                })
            };
        }
    };
    a = $('#autoLocation').autocomplete(options);
});
Run Code Online (Sandbox Code Playgroud)

这对我来说很好.