2009-11-17 80 views
6

我有一个选择字段。我必须填写从MySQL表中选择的选项。
下面是一些小的PHP代码我已经使用笨框架jQuery将项目填充到选择使用jQuery ajax json,php

$idcateg = trim($this->input->post('idcategory')); 
$array1 = array(
    'result' => $idcateg 
); 
echo json_encode($array1); 

现在,jQuery的调用来完成...

$.post("<?=base_url()?>index.php/rubro/list_ajax/", { 
    'idcategory' : idc }, 
    function(data){ 
     alert(data.result); 
    }, "json"); 

的代码工作正常。当我打电话给我时,我得到了类别ID。
现在,我应该修改上面的代码,所以我可以做:

  • 后Ajax调用发送类别ID。这样做是
  • 得到小类这一类别,并建立数组*
  • json_encode数组和回声*
  • 得到的结果早在jQuery的Ajax调用,解码和建立<选择>字段*

该数组应该建立与每个元素有一个ID和名称的子数组,对吧? 非常感谢您的帮助

回答

29

这没什么不同。

$idcateg = trim($this->input->post('idcategory')); 
$result = array(); 
$id = mysql_real_escape_string($idcateg); 
$res = mysql_query("SELECT * FROM subcategories WHERE category = $id"); 
while ($row = mysql_fetch_array($res)) { 
    $result[] = array(
    'id' => $row['subcatid'], 
    'desc' => $row['description'], 
); 
} 
echo json_encode($result); 

有:

$.post("<?=base_url()?>index.php/rubro/list_ajax/", { 
    'idcategory' : idc }, 
    function(data) { 
    var sel = $("#select"); 
    sel.empty(); 
    for (var i=0; i<data.length; i++) { 
     sel.append('<option value="' + data[i].id + '">' + data[i].desc + '</option>'); 
    } 
    }, "json"); 
+0

嗨cletus。工作完美。你现在可以告诉我,如果什么都没有退回? (即mysql返回空)。我怎么知道结果是否为空? 谢谢 – Enrique 2009-11-17 20:38:25

+0

data.lenght将是0 – 2015-12-30 19:53:51

+1

或者,而不是'for',可能是:'$ .each(data,function(key,val){sel.append($(“

7

是。您想传回包含名称/值对的JSON编码对象数组。然后你可以用这些迭代地创建你的选择。

$.post("<?=base_url()?>index.php/rubro/list_ajax/", 
    {'idcategory' : idc }, 
    function(data){ 
     var select = $('#selectName').empty(); 
     $.each(data.values, function(i,item) { 
      select.append('<option value="' 
           + item.id 
           + '">' 
           + item.name 
           + '</option>'); 
     }); 
    }, "json"); 
1

你也可以只使用$()。load()和有你的PHP代码生成<option>标签

$return = ""; 
    while ($row = mysql_fetch_array($res)) { 
    $value = $row['value']; 
    $text = $row{'text']; 
    $return .= "<option value='$value'>$text</option>\n"; 
    } 
print $return; 
} 

...

$('#select').load("<?=base_url()?>index.php/rubro/list_ajax/"); 
+0

真棒提示/想法...将尝试它!感谢斯科特! – Enrique 2009-11-17 20:39:24

+0

请注意,根据我的经验,此解决方案可能无法在IE8及其以下版本中使用,因为使用innerHTML进行DOM操作时存在错误(http://webbugtrack.blogspot.it/2007/08/bug-274-dom-methods-on -select-lists.html) - 但它在其他浏览器上运行良好,包括IE 9+ – furins 2013-06-04 08:42:07

1

尝试下面的代码。

在控制器---------

public function AjaxTest() { 

      $rollNumber = $this->input->post('rollNumber'); 
      $query = ""; 

      if($rollNumber !="") 
      { 
       $query = $this->welcome_model->get_students(); 
      } 
      else 
      { 
       $query = $this->welcome_model->get_students_informationByRoll($rollNumber); 
      } 

      $array = array($query); 
      header('Content-Type: application/json', true); 
      echo json_encode($array); 

     } 

在视图添加选择选项

<input type="text" id="txtSearchRoll" name="roll" value="" /> 
<input type="button" name="btnSubmit" value="Search Students" onclick="return CheckAjaxCall();"/> 

    <select id="myStudents"> 
       <option> 
        --Select-- 
       </option> 
      </select> 

现在脚本----

function CheckAjaxCall() 
      { 
       $.ajax({ 
        type:'POST', 
        url:'<?php echo base_url(); ?>welcome/AjaxTest',      
        dataType:'json', 
        data:{rollNumber: $('#txtSearchRoll').val()},      
        cache:false, 
        success:function(aData){ 

         $('#myStudents').get(0).options.length = 0; 
         $('#myStudents').get(0).options[0] = new Option("--Select--", "0");   

         $.each(aData, function(i,item) { 
         $('#myStudents').get(0).options[$('#myStudents').get(0).options.length] = new Option(item[i].Name, item[i].roll); 
                              // Display  Value 
        }); 

        }, 
        error:function(){alert("Connection Is Not Available");} 
       }); 

       return false; 
      } 

享受代码....