2009-11-17 55 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; 
      } 

享受代碼....