2016-09-08 5 views
0

現在、JQueryに取り掛かり、より具体的にはAJAXリクエストを取得しようとしています。JQuery AJAXリクエスト(jsonオブジェクトとして)を使用してドロップダウンリストにオプションを追加

コード:
Javascriptを:

success: function(json) { 
     console.log(json); 
     var $el = $("#system"); 
     $el.empty(); // remove old options 
     $el.append($("<option></option>") 
      .attr("value", '').text('Please Select')); 

     // for each set of data, add a new option 
     $.each(json, function(value, key) { 
      $el.append($("<option></option>") 
       .attr("value", value).text(key)); 
     }); 

}, 

HTML:

<form id="filter"> 
    <label for="datepicker"> 
     Date: <input id="datepicker" onchange="updateSystems()" type="text" /> 
    </label> 
    &nbsp; 
    <label>from: 
     <select id="timespan-from" name="timespan-from" onchange="updateSystems()" size="1"> 
      <option value="0">0 Uhr</option> 
      ... 
      <option value="23">23 Uhr</option> 
     </select> 
    </label> 
    &nbsp; 
    <label>to: 
     <select id="timespan-to" name="timespan-to" onchange="updateSystems()" size="1"> 
      <option value="0">23 Uhr</option> 
      ... 
      <option value="0">0 Uhr</option> 
     </select> 
    </label> 
    &nbsp; 
    <label>in System: 
     <select id="system" name="system" size="1"> 
      <!-- this should be updated --> 
      <option>Amarr</option> 
      <option>JEIV-E</option> 
      <option>Jita</option> 
      <option>Litom</option> 
      <option>Penis</option> 
     </select> 
    </label> 
</form> 

この機能は、私は私の文書のフィールドを変更するたびに、トリガー とhtmlの要素を更新する必要がありますされます落ちる。

AJAXリクエストは機能しますが、dropdown-updateは意図したとおりに機能しません。私はと<select>ドロップダウンに<option>フィールドを追加しようとしています。

しかし、結果のドロップダウンが常に次のようになります。

  • [オブジェクトのオブジェクト]

を選択してくださいどのようなので、変更することが私の機能を必要とすることは、私のドロップダウンに私のJSONデータを追加しますメニュー?私のPHPスクリプトから

例JSONのリターン:

[ 
    { 
        "solarSystemID": "30001171", 
        "solarSystemName": "F4R2-Q" 
    }, 
    { 
        "solarSystemID": "30001182", 
        "solarSystemName": "MB-NKE" 
    }, 
    { 
        "solarSystemID": "30004299", 
        "solarSystemName": "Sakht" 
    }, 
    { 
        "solarSystemID": "30004738", 
        "solarSystemName": "1-SMEB" 
    } 
] 

solarSystemIDsolarSystemName
は、テキストである必要があり、<option>の値になるはずです。

事前にお手伝いをしていただきありがとうございます。最終的に意図した通りに作業を進めるには、正しい方向に少し押してください。

+0

デバッグ時に、 'option'要素を作成するために使用している' key'と 'value'の値は何ですか?それらのうちの1つがオブジェクトであり、リテラル値ではないように見えます。 – David

+3

質問に関連するすべてのコードを表示してください。私たちはあなたの問題を見直すために外に出るべきではありません。質問は自己完結型でなければなりません – charlietfl

+0

値は0..1..2.3です...キーは毎回オブジェクトになります...文字列に強制されるオブジェクトは '[オブジェクトオブジェクト]'になります - jQuery.eachコールバック引数はキー、値、値ではなく、キーです - おそらくArray#forEachを考えています –

答えて

3

ソーラーオブジェクトをオプション要素にマップするマップメソッドを使用できます。

$('#system').append(json.map(function(sObj){ 
    return '<option id="'+sObj.solarSystemID+'">'+ sObj.solarSystemName +'</option>' 
})); 
+0

私はこれが好きです。なぜなら、それぞれのアイテムのために追加するのではなく、1つの追加をするからです!ブラウザが幸せになれます:p –

+0

これは魅力のように機能します、ありがとう!しかし、最後には ')'行方不明です! – GosuSan

+0

これを修正しました。 – naortor

関連する問題