0

次の配列をハードコーディングしました。これを使用して、オートコンプリート ドロップダウンに選択を挿入できます。私は JS の初心者であり、間違っている可能性がありますが、JSON オブジェクトの配列のようです。できます。

var boroughData = [
    {"label":"New York, Bronx, Bronx County, New York, United States","value":"Bronx, Bronx County, New York, United States"},
    {"label":"New York, Staten Island, Richmond County, New York, United States","value":"Staten Island, Richmond County, New York, United States"}
];

データベースから同様のデータを提供し、.map() 関数を介して組み立てたいと考えています。何かが機能していますが、出力の形式/タイプが異なります。1 つの長い文字列を含む配列のように見えますが、これも間違っている可能性があります。例 (異なる都市) を以下に示します。上記のハードコードされた配列にない最初と最後の " に注意してください。

["{"label":"Dallas, Cockr... Texas, United States"}", "{"label":"Dallas, Downt... Texas, United States"}", "{"label":"Dallas, East ... Texas, United States"}"]

データベースからのデータは現在次のようになっていますが、それが役立つ場合は変更される可能性があります。

{"label":"Dallas, Cockrell Hill, Dallas County, Texas, United States", "value":"Dallas, Cockrell Hill, Dallas County, Texas, United States"}

最初と最後を置き換える/削除するために文字列操作を試みました "しかし、私はそれを機能させることができませんでした。オブジェクトを作成するために .map() 関数で何か違うものが必要かもしれません.ajax成功オプションの.map()は次のとおりです続く

success: function (data){
    boroughData = $.map( data, function (item){
        return item.boroughString;
        //returning {"label":"Dallas, Cockrell Hill, Dallas County, Texas, United States", "value":"Dallas, Cockrell Hill, Dallas County, Texas, United States"}
    });
    alert(jQuery.isArray(boroughData)  + "|bD1"); //true, is array
    return boroughData;
}

ハードコードされた配列と同じ型/形式の戻り結果を取得するにはどうすればよいですか? コードで具体的にしてください。私は一般的な指示にうまく従いません。

4

2 に答える 2

0

取得するデータitem.boroughStringは文字列であるため、おそらくそれを解析できますJSON.parse(または、json2.jsこの機能をサポートしていないブラウザーに使用します。この質問も参照してください: JavaScript で JSON を解析しますか? ) 。完全な JSON オブジェクト。

$.ajax({
    success: function (data){
        boroughData = $.map( data, function (item){
            return JSON.parse(item.boroughString);
            // should return JSON object {"label":"Dallas, Cockrell Hill, Dallas County, Texas, United States", "value":"Dallas, Cockrell Hill, Dallas County, Texas, United States"}
        });

        alert(jQuery.isArray(boroughData)  + "|bD1"); //true, it is again an array

        //return boroughData; Your success should not return a variable to be used after!!! Ajax is asynchronous
        //
        // Rather use a callback function
        functionToBeExecutedAfterTheSuccess();
    }
});

function functionToBeExecutedAfterTheSuccess() {
    alert(boroughData + "|bD3"); //[object Object],[object Object],[object Object] with OK contents
}
于 2012-12-12T22:58:48.973 に答える
0

あなたができる最善のことは、サーバーが有効な JSON オブジェクトを返すことを確認することだと私には思えます。通常、サーバー側で修正できるものを Javascript で修正することはお勧めしません。

つまり、文字列をハードコードされた配列と等しい配列に変換する方法は、次のように使用できます。

success: function (data){
    // split the data with separator ", 
    var parts = data.split("\",");
    var boroughData = [];
    // looping through all parts
    for (var i=0, ii=parts.length; i < ii; i++) {
      // getting the value of the part between { and }
      var part = parts[i].substring(parts[i].indexOf("{"),parts[i].indexOf("}")+1);
      // add part as json to the array
      boroughData.push($.parseJSON(part));
    }
    return boroughData;
} 
于 2012-12-13T07:11:39.667 に答える