jQuery заполняет элементы в Select, используя jQuery ajax json, php - PullRequest
6 голосов
/ 17 ноября 2009

У меня есть поле выбора. Я должен заполнить опции, взятые из таблицы MySQL.
Вот небольшой PHP-код, который я сделал, используя codeigniter framework

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

Код работает нормально. Когда я звоню по почте, в результате я получаю categoryid.
Теперь я должен изменить приведенный выше код, чтобы я мог сделать:

  • опубликовать вызов ajax, отправив идентификатор категории. это сделано
  • получить подкатегории для этой категории и построить массив *
  • json_encode массива и эхо *
  • получить результаты обратно в вызове jQuery ajax, декодировать и создать поле

Массив должен быть построен так, чтобы каждый элемент имел подмассив с идентификатором и именем, верно? Заранее большое спасибо за любую помощь

Ответы [ 4 ]

29 голосов
/ 17 ноября 2009

Это не сильно отличается.

$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");
8 голосов
/ 17 ноября 2009

Да. Вы хотите передать обратно 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 голос
/ 24 сентября 2012

Попробуйте следующий код.

В контроллере ---------

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

Наслаждайтесь кодом ....

1 голос
/ 17 ноября 2009

вы также можете просто использовать $ (). 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/");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...