4

devbridge jquery オートコンプリート ライブラリを使用して、wunderground.com のオートコンプリート API を取得しようとしています。cb を serviceUrl にアタッチするかどうかに関係なく、返された json を解析できません。応答には、「{RESULTS: [{使用したい配列データ}]}」というプレフィックスが付きます。

ドキュメントで提供されているオートコンプリート コードを使用すると、「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);
});

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

私は数日間途方に暮れており、非常に単純なものを見ているに違いありません。どんな助けや指導も大歓迎です。

4

1 に答える 1

9

これを機能させるには、ソースを変更する必要があります。これは、jquery jsonp のデフォルトの callaback クエリ文字列キーが「cb」ではなく「callback」であるためです。したがって、オートコンプリート ソースに jsonp: 'cb' を追加します。

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

これは私にとってはうまくいきます。

于 2014-04-16T21:39:00.830 に答える