0

JSON配列を返すサービス(mimetype application / json内)でJQueryオートコンプリートを使用しようとしています。私の開発は次の例に基づいています:http://jqueryui.com/autocomplete/#remote-jsonpこれはGeonamesからJSONを取得します。geonamesの例の正しいjsonは、次のようになります。

{"totalResultsCount":8387672,"geonames":[{"countryName":"Iran","adminCode1":"23","fclName":"mountain,hill,rock,... ","countryCode":"IR","lng":49.133333,"fcodeName":"mountain","toponymName":"Kūh-e Zardar","fcl":"T","name":"Kūh-e Zardar","fcode":"MT","geonameId":1,"lat":32.983333,"adminName1":"Lorestān","population":0}]}

残念ながら、私のサービスは私に次のものだけを提供します:

["berlin; berlin-steglitz","berliner festspiele"]

配列も解析しようとしていますが、正しいHttp 200を取得し、応答が正しいことを確認しても、配列を解析したり操作したりすることはできません。JQueryからの.ajex関数"success"は呼び出されず(jsonコンテンツを期待し、テキストを取得するためだと思います)、 "complete"は、responseTextまたはデータのコンテンツを取得するメソッドのないデータオブジェクトを返します。 。サービスが別のドメインにあり、クロスドメインパターンを壊しているため、requesttype"text"を使用できません。以下の私のコード。

$(function() {
    $("#searchinput").autocomplete(
            {
                source : function(request, response) {

                    $.ajax(
                        {
                        url : "http://Mybackendservice.com/",
                        dataType : "jsonp",
                        data : {
                            query : request.term
                        },
                        complete : function(data) {
                            console.log(data);
                            for(i=0;i<data.length;i++){
                                console.log(data[i].parametername); /// do whatever you want here.
                            };
                            response($.map(data, function(n,i) {
                                return {
                                    label : n,
                                    value : i
                                }
                            }));
                        }
                    });
                },
                minLength : 2,
                select : function(event, ui) {
                    console.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");
                }
            });
});

誰かがそのような配列を解析する問題に対処する方法についていくつかの推奨事項がありますか?

4

1 に答える 1

0

JSONPリクエストには、コールバック関数の名前をレスポンスの前に付けるサービスが必要です。ウィキペディアのJSONPページでいくつかの情報が提供されています

于 2013-03-26T11:39:12.747 に答える