2009-11-17 6 views
6

Ich habe ein Auswahlfeld. Ich muss mit Optionen aus einer MySQL-Tabelle füllen.
Hier sind einige kleine PHP-Code I codeigniter FrameworkjQuery füllen Elemente in eine Auswahl mit jQuery AJAX JSON, PHP

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

nun die jQuery-Aufruf ...

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

Der Code funktioniert gut getan haben. Wenn ich den Post anrufe, bekomme ich als Ergebnis das categoryid. Jetzt
, sollte ich den obigen Code ändern, so kann ich tun:

  • post die Ajax-Aufruf Senden der Kategorie-ID. dies geschieht
  • Unterkategorien für diese Kategorie erhalten, und bauen das Array *
  • json_encode das Array und Echo *
  • Ergebnisse zurück in jQuery Ajax-Aufruf, zu dekodieren und bauen die < wählen> Feld *

Das Array sollte mit jedem Element mit einem Sub-Array mit ID und Namen gebaut werden, richtig? Vielen Dank im Voraus für jede Hilfe

Antwort

29

Es ist nicht viel anders.

$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); 

mit:

$.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

Hallo Cletus. Perfekt gearbeitet. Kannst du mir jetzt sagen, was passiert, wenn nichts zurückgegeben wird? (d. h. mysql gibt leer zurück). Wie kann ich feststellen, ob das Ergebnis leer ist? danke – Enrique

+0

data.length wird 0 sein –

+1

Oder, anstelle der 'for', könnte sein:' $ .Each (Daten, Funktion (Schlüssel, Wert)) { sel.append ($ ("

7

Ja. Sie möchten ein JSON-codiertes Array von Objekten zurückgeben, die Name/Wert-Paare enthalten. Dann können Sie Ihre Auswahl iterativ mit diesen erstellen.

$.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

Sie könnten auch nur $() verwenden. Load() und haben Ihre PHP-Code generieren, um die <option> Tags

$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

Super Tipp/Idee ... Werde es versuchen !! Danke Scott !! – Enrique

+0

Beachten Sie, dass diese Lösung meiner Erfahrung nach möglicherweise nicht auf IE8 und darunter funktioniert, da ein Fehler bei der DOM-Manipulation mit innerHTML auftritt (http://webbugtrack.blogspot.it/2007/08/bug-274-dom-methods-on) -select-lists.html) - aber es funktioniert gut in anderen Browsern, einschließlich IE 9+ – furins

1

Versuchen Sie, den folgenden Code ein.

Kontroller ---------

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); 

     } 

In Ansicht hinzufügen Wählen Sie eine Option

<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> 

Jetzt Scripts ----

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; 
      } 

Genießen Sie die Code ....