2011-08-17 14 views
3

私は以下の問題があります。ドロップダウンから要素を選択すると、別のドロップダウンをajax経由で自動入力したいと考えています。サブカテゴリ(sub_type)が「タイプ」を選択した後にロードされないという考えがあります。 isn`tロードされたDropdown ajaxを投入する

[{id: 0, name: 'Mark'}, {id:1, name: 'Andy'}, {id:2, name: 'Richard'}] 

しかしsubcathegory(選択secont):

HTML 
<select id="type" name="type"> 
<option value="1">General</option> 
<option value="2">Test</option> 
</select> 
<select id="sub_type" name="sub_type"> 
</select> 


SCRIPT 
    $("#type").change(function(){ 
    $.getJSON("ajax/add_subcathegory.php",{id: $(this).val(), ajax: 'true'}, function(j){ 
      var options = ''; 
      for (var i = 0; i < j.length; i++) { 
      options += '<option value="' + j[i].id+ '">' + j[i].name+ '</option>'; 
      } 
     }); 
    $("#sub_type").html(options); 
    }); 

私のAjaxのスクリプトが返されます。

+0

あなたは何の問題があるのか​​はっきりしません。あなたはあなたの質問を書き返すことができますか? –

+0

編集した私の声明 –

答えて

13

Ajaxの成功関数が実際に呼び出されたと仮定すると、への機能コード変更:

  var $subType = $("#sub_type"); 
      $subType.empty(); 
      $.each(j, function() { 
      $subType.append($('<option></option>').attr("value", this.id).text(this.name)); 
      }); 

あなたの主な問題を、現在、次のとおりです。

  • html関数は、sucess関数の外にあるため、1回だけ呼び出されます。
  • Ajaxのデータ中の要素のキーID名前を持ってしていないoptionValueoptionDisplay

更新:ザ・はJSONが無効で返さ

。文字列は一重引用符ではなく、二重引用符で囲む必要があります。その結果、getJSON()呼び出しが黙って失敗します。

+0

の問題を解決しましたか? ajax( "ajax/add_subcathegory.php"、{id:$(this)).val()、ajax: 'true(これは、 '}、関数(J){ \t \t変数$サブタイプ= $( "#1 sub_type"); $ .each(J、関数(){ $ subType.append($(' 「).ATTR( "value"、this.id).text(this.name)); }); }); }); –

+0

「うまくいかない」と言うと、何も起こらないということですね。失敗した箇所をデバッグして、より効果的にお手伝いできるようにしてください。 Javascriptエラーが発生しているかどうかを確認するには、FirefoxのJavascriptコンソール(またはブラウザの同等のコンソール)を見てください。そうでない場合は、Firebug、Fiddlerなどのツールを使用して、ネットワークリクエストとAjaxリクエストとAjaxレスポンスとして表示されていることを確認します。 Firebugでは、成功関数にブレークポイントを設定して、まったく呼び出されているかどうかを確認することもできます。 – Codo

+0

私はajaxレスポンスを見ることができるようにクロムを使用しています。変更したスクリプトを実行するとエラーは発生しません。 –

2

問題は、ajax JSON呼び出しの直後に#sub_typeにhtmlを割り当てることです。あなたはこのようなAJAXコールバック関数でそれを割り当てる必要があります。

$("#type").change(function(){ 
    $.getJSON("ajax/add_subcathegory.php",{id: $(this).val(), ajax: 'true'}, function(j){ 
    var options = ''; 
    for (var i = 0; i < j.length; i++) { 
     options += '<option value="' + j[i].id + '">' + j[i].name + '</option>'; 
    } 
    $("#sub_type").html(options); 
    });  
}); 
+0

次のいずれかを実行しません。 ajaxレスポンスのスペースは数えますか? –

+0

#sub_typeが表示されていますか? $( '#sub_type')を呼び出してみてください。html( ''); Ajaxコールバックの外側で動作するかどうか(またはonchange関数の外でさえ) –

+0

ありがとうございます。 –