1

IE で ajax リクエストが機能しない問題を修正するために、コードを変更しました。現在、どのブラウザでも機能していません。奇妙な部分は、ajax リクエストが適切な結果を取得することです。この結果のみが解析されません。これを修正する方法は?いくつかのヘッダーなどを変更する必要がありますか?

すべての関数は tbGeocoder オブジェクトのメソッドです。

 $.ajax({
        url: 'http://nominatim.openstreetmap.org/search',
        type: 'GET',
        dataType: 'jsonp',
        jsonp: 'false',
        jsonpCallback: 'json_callback' + tbGeocoder.requestIndex,
        data: {
            format: 'json',
            q: input,
            limit: 1,
            json_calback: 'json_callback' + tbGeocoder.requestIndex
        },
        beforeSend: function(x) { 
            if (x && x.overrideMimeType) { 
                x.overrideMimeType("application/json;charset=UTF-8"); 
            } 
        },
        dataFilter: function (data, type) {
            console.log(data);
            console.log(type);
          /*for (key in data) {
                //console.log(key);
            }*/
            return data;
        },
        success: tbGeocoder.processRequestResult,

        error: function(data, textStatus, jqXHR) {
            console.log(textStatus);
        }
    });
    tbGeocoder.requestIndex++;
},
preProcessRequestResult: function (data, type) {
    console.log(data);
    console.log(type);
    for (key in data) {
        //console.log(key);
    }
    return data;
},
processRequestResult: function (data) {
    console.log('==>in loop for nominatim');
}

firebug では、input="Den Dolechh" のような入力に対するコンソール出力は次のとおりです。

code address location
Den Dolech
undefined
jsonp
parsererror
Object { readyState=4, status=200, statusText="success"}

ネットワークステータスでは、ヘッダーが次のようになっていることがわかります。

 Replyheaders
 Access-Control-Allow-Orig...   *
 Connection close
 Content-Length 445
 Content-Location   search.php
 Content-Type   application/json; charset=UTF-8
 Date   Thu, 05 Jul 2012 10:31:11 GMT
 Server Apache/2.2.14 (Ubuntu)
 TCN    choice
 Vary   negotiate
 X-Powered-By   PHP/5.3.2-1ubuntu4.17

 Requestheaders
 Accept */*
 Accept-Encoding    gzip, deflate
 Accept-Language    nl,en-us;q=0.7,en;q=0.3
 Connection keep-alive
 Host   nominatim.openstreetmap.org
 Referer    http://localhost/locations/add
 User-Agent Mozilla/5.0 (Windows NT 6.1; WOW64; rv:13.0) Gecko/20100101 Firefox/13.0.1

返信は次のとおりです。

 [{"place_id":"44757488","licence":"Data Copyright OpenStreetMap Contributors, Some Rights Reserved. CC-BY-SA 2.0.","osm_type":"way","osm_id":"36859933","boundingbox":["51.4484252929688","51.449333190918","5.48478031158447","5.48527336120605"],"lat":"51.4489435225293","lon":"5.48514453068994","display_name":"Den Dolech, Eindhoven, Samenwerkingsverband Regio Eindhoven, Noord-Brabant, 5600 MB, Nederland","class":"highway","type":"residential"}]

これを修正するにはどうすればよいですか? データを取得しましたが、どうすれば取得できますか?

4

3 に答える 3

1

データを直接使用しないでくださいprocessRequestResult

それをいくつかの変数に使用data.dして保存します。

var tempData = data.d;

tempDataの代わりに使用するようになりdataました。

于 2012-07-05T14:02:11.093 に答える
0

OK、これは非常に迷惑です。答えはタイプミスの修正です!

この線

 json_calback: 'json_callback' + tbGeocoder.requestIndex

する必要があります

data: {
            format: 'json',
            q: input,
            addressdetails: 1,
            limit: 1,
            json_callback: 'json_callback' + tbGeocoder.requestIndex
        },

コールバックの二重の「l」に注意してください。とにかくそれが私が探していたものなので、私はアドレスの詳細も追加しました;-)

これで、適切なjsonp応答が得られます。

 json_callback11([{"place_id":"44757488","licence":"Data Copyright OpenStreetMap Contributors, Some Rights Reserved. CC-BY-SA 2.0.","osm_type":"way","osm_id":"36859933","boundingbox":["51.4484252929688","51.449333190918","5.48478031158447","5.48527336120605"],"lat":"51.4489435225293","lon":"5.48514453068994","display_name":"Den Dolech, Eindhoven, Samenwerkingsverband Regio Eindhoven, Noord-Brabant, 5600 MB, Nederland","class":"highway","type":"residential","address":{"road":"Den Dolech","residential":"Eindhoven","suburb":"Eindhoven","city":"Eindhoven","county":"Samenwerkingsverband Regio Eindhoven","state":"Noord-Brabant","postcode":"5600 MB","country":"Nederland","country_code":"nl"}}])

これは正しく処理されます。これは、同じオリジンの問題とブラウザー間の違いを修正するための必要なトリックです(json_callbackとjsonp_callbackを同じにするために...)。これは、WindowsのIE9、FF、Chrome、MacのFF、Chrome、Safiriで機能します。

于 2012-07-06T13:15:20.413 に答える
0

添付された JSON は有効な JSON であり、 JSONP ではありません

// Some valid JSON responses:
// (even yours is valid JSON)
{x: 1}
[{x: 1}, {x: 2}]

// Some valid JSONP responses:
foo({x: 1})
bar([{x: 1}, {x: 2}])
于 2012-07-05T13:33:33.473 に答える