添加到sqlite3中的数组并使用json传递给jquery ajax

时间:2012-07-31 18:20:54

标签: php jquery ajax json multidimensional-array

我尝试从数据库填充下拉列表。我查询并将结果添加到数组中。然后我使用json_encode将我的数据发送到php文件。

$query="SELECT project FROM main";
$results = $db->query($query);
while ($row_id = $results->fetchArray()) {
       $proj_option[] = "<option value=\"".$row_id['project']."\">".$row_id['project']."</option>\n";
       $pselected=$row_id['project'];
}
$output = array( "proj" => $proj_option);
echo json_encode($output);

在我的php文件中,我使用jquery ajax来填充下拉列表。

$("#turninId").change(function() {

    var user_id = $("#turninId").val();

    $.ajax ( {
      url:"send_input.php",
      type: "POST",
      dataType: "json",
      data:{id_selection: user_id},
      success:function(response) {

        for (var i=0; i<response.proj.length; i++) {
          $("#exp").html(response.proj[i]);
          $("#project").html(response.proj[i]); } });

 });

这很棒,但我下拉列表中唯一的项目是数据库中的最后一项。例如,我的数据库在Project下具有以下内容:

Project: up, down, low, right

但我的下拉只填写最后一个条目,#34;右边。&#34;为什么是这样?我该如何解决?

PHP json_encode() in while loop是类似的,我做了更改,但这里缺少一些东西。

2 个答案:

答案 0 :(得分:1)

可能会尝试这个

success:function(response) {

  $.each(response.proj,function(key,value){
      $("#exp").append(value);
      $("#project").append(value);
  });

}

答案 1 :(得分:0)

每次通过javascript循环你都会覆盖你的html。 .html()方法设置标记的innerHTML属性,因此每次调用它时都会重置html,只显示最后一个。尝试不使用循环,而是将您的响应加在一起,然后调用.html()

$("#exp").html(response.proj.join(''));
$("#project").html(response.proj.join(''));