使用Devbridge自动完成和Wunderground自动完成API

4
我正在尝试使用devbridge jquery自动完成库来获取wunderground.com的自动完成API,但一直遇到问题。无论我是否将cb附加到serviceUrl上,它都无法解析返回的json。响应以"{RESULTS:[{我想要使用的数组数据}]}"为前缀。

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

当我将&cb=myresults 应用于serviceUrl时,我得到了"Uncaught ReferenceError:myresults未定义"。

我的代码是:

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);
});

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

我已经迷茫了几天,我确定我正在寻找非常简单的东西。任何帮助或指导都将不胜感激。

1个回答

9
为了让它正常工作,您需要修改源代码,因为jQuery Jsonp默认的回调查询字符串键不是"cb",而是"callback"。因此,在自动完成源中添加:jsonp:'cb'。请注意保留HTML标记。
        that.currentRequest = $.ajax({
            url: serviceUrl,
            data: params,
            type: options.type,
            jsonp: 'cb',
            dataType: options.dataType
        }).done(function (data) {

你的代码应该是这样的:

然后你的代码应该是:

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);
});

这对我来说运作良好。

从来没有想过修改源代码。非常感谢,那一行代码完美地解决了问题!(很抱歉我不能投票,我还需要4个声望点) - Bazar6

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接