2009-11-17 13 views
6

Tengo un campo de selección. Debo completar con las opciones tomadas de una tabla mysql.
Aquí está algo poco código php que he hecho utilizando el framework CodeIgniterjQuery llenar elementos en a Seleccionar usando jQuery ajax json, php

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

Ahora, la llamada jQuery ...

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

El código funciona bien. Cuando llamo a la publicación, obtengo el categoryid como resultado.
Ahora, debe modificar el código anterior, por lo que se puede hacer:

  • contabilizar el envío de la categoría ID llamada AJAX. esto se hace
  • obtener subcategorías de esta categoría, y construir la matriz *
  • json_encode la matriz y el eco *
  • obtener resultados de vuelta en jQuery llamada AJAX, decodificar y construir el campo < seleccione> *

La matriz debe construirse con cada elemento que tiene una sub-matriz con id y nombre, ¿verdad? Muchas gracias de antemano por cualquier ayuda

Respuesta

29

No es muy diferente.

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

con:

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

hi cletus. Funcionó perfecto. ¿Puede decirme ahora qué pasa si no se devuelve nada? (es decir, mysql devuelve vacío) ... ¿cómo puedo saber si el resultado está vacío? gracias – Enrique

+0

data.lenght será 0 –

+1

O, en lugar del 'for', podría ser:' $ .each (datos, función (clave, val) { sel.append ($ ("

7

Sí. Desea devolver una matriz de objetos codificada JSON que contiene pares de nombre/valor. Luego puede crear su selección iterativamente usando estos.

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

usted podría también sólo tiene que utilizar $(). Load() y tienen su código PHP generan las etiquetas <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

Awesome tip/idea ... Lo intentaré !! Gracias, Scott! – Enrique

+0

tenga en cuenta que, según mi experiencia, esta solución puede no funcionar en IE8 y en versiones posteriores debido a un error en la manipulación de DOM mediante innerHTML (http://webbugtrack.blogspot.it/2007/08/bug-274-dom-methods-on -select-lists.html); sin embargo, funciona bien en otros navegadores, incluido IE 9+ – furins

1

probar el siguiente código.

En Controlador ---------

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

     } 

En Ver Añadir a Seleccione la opción

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

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

Disfrute de la código ....

Cuestiones relacionadas