Здравствуйте! Прошу помочь с решением следующей задачки. Выгружаю из базы столбцы с данными. Столбцы надо упаковать в JSON так: value: цикл значений 1-го и text: цикл значений другого столбца. На странице вывести в выпадающем списке средствами js. Есть обработчик <?php if (isset($_POST['grz'])) { $autocl_id = isset($_POST['grz']) ? trim(strip_tags($_POST['grz'])) : null; $result = array(); $sql = mysqli_query($link, "SELECT `client_auto`.`autocl_id`, `client_auto`.`grz`, `client_auto`.`cars_id`, `auto_markamodel`.`marka_avto`, `auto_markamodel`.`model_avto`, `client_auto`.`client_id`, `clients`.`client_name` FROM `client_auto` JOIN `clients` ON `client_auto`.`client_id`=`clients`.`client_id` JOIN `auto_markamodel` ON `auto_markamodel`.`cars_id`=`client_auto`.`cars_id`"); /*while($row = mysqli_fetch_array($sql)) { $result = array( 'grz' => ('<select class="form-control form-control-chosen" id="grz" name="grz"><option value="'.$row['autocl_id'].'">'.$row['grz'].'</option></select>'), 'cars_id' => '<select class="form-control form-control-chosen" id="grz" name="grz"><option value="'.$row['cars_id'].'">'.$row['marka_avto'].' '.$row['model_avto'].'</option></select>', 'client_id' => '<option value="'.$row['client_id'].'">'.$row['client_name'].'</option>' );*/ while($row = mysqli_fetch_assoc($sql)) { $result[][$row['autocl_id']] = $row['grz']; //$result[]['value'] = $row['autocl_id']; } // Переводим массив в JSON echo json_encode($result); //echo ($result); } ?> код js: function sendAjaxForm(result_form, formauto, url) { $.ajax({ url: url, //url страницы (action_ajax_form.php) type: "POST", //метод отправки dataType: "html", //формат данных data: $("#"+formauto).serialize(), // Сеарилизуем объект success: function(response) { //Данные отправлены успешно console.log(response); result = $.parseJSON(response); var data = [result]; $.each(data, function (key, value) { alert(`${key}: ${value}`); $('#client_id').append('<option value="' + value + '">' + value + '</option>'); }, error: function(response) { // Данные не отправлены $('#client_id').html('Ошибка. Данные не отправлены.'); } }); } Не знаю, правильно ли упаковал в массив. выглядит так: [{"1":"\u043d649\u043c\u044040"},{"5":"\u043d556\u0441\u043e32"},{"4":"\u043f677\u0440\u043e32"},{"6":"\u043f787\u043d\u043532"},{"7":"\u0435354\u0442\u043532"},{"8":"\u0430999\u0432\u044132"},{"9":"\u043d505\u043e\u0443199"}] А в списке выдает <option value="[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]">[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]</option> Думается, что массив должен выглядить так (к примеру). И это только для одного выпадающего списка. А если их много?? [ { "value": 0, "text": "Не выбран" }, { "value": 1, "text": "A1" }, { "value": 2, "text": "A2" } ] В общем, выводить списки из JSON не получается. просьба помочь.
вот тут Код (Text): function sendAjaxForm(result_form, formauto, url) { $.ajax({ url: url, //url страницы (action_ajax_form.php) type: "POST", //метод отправки //dataType: "html", //формат данных dataType: "json"
PHP: <?php if ( isset($_POST['grz']) ) { $autocl_id = isset($_POST['grz']) ? trim(strip_tags($_POST['grz'])) : null; $grz = ''; $cars_id = ''; $client_id = ''; $sql = mysqli_query($link, "SELECT `client_auto`.`autocl_id`, `client_auto`.`grz`, `client_auto`.`cars_id`, `auto_markamodel`.`marka_avto`, `auto_markamodel`.`model_avto`, `client_auto`.`client_id`, `clients`.`client_name` FROM `client_auto` JOIN `clients` ON `client_auto`.`client_id`=`clients`.`client_id` JOIN `auto_markamodel` ON `auto_markamodel`.`cars_id`=`client_auto`.`cars_id`"); while($row = mysqli_fetch_array($sql)) { $grz .= "<option value='{$row['autocl_id']}'>{$row['grz']}</option>"; $cars_id .= "<option value='{$row['cars_id']}'>{$row['marka_avto']}</option>"; $client_id .= "<option value='{$row['client_id']}'>{$row['client_name']}</option>"; ); $result [ 'grz' => $grz, 'cars_id' => $cars_id, 'client_id' => $client_id ] echo json_encode($result); } ?> Код (Javascript): <select class="form-control form-control-chosen" id="grz" name="grz"></select> <select class="form-control form-control-chosen" id="cars_id" name="cars_id"></select> <select class="form-control form-control-chosen" id="client_id" name="client_id"></select> <script> function sendAjaxForm(result_form, formauto, url) { $.post( "action_ajax_form.php", $("#"+formauto).serialize(), function( data ) { console.log( data ); $("#grz").html( data.grz ); $("#cars_id").html( data.cars_id ); $("#client_id").html( data.client_id ); }, "json"); } </script>
не стоит гонять лишние данные по сети, строя html на стороне сервера. (это увеличивает размеры данных, тормозя скорость) json массива хватит. нужно просто распарсить его
@kazadai90 всегда стараюсь генерировать html на сервере. Зачем генерировать HTML в PHP: JavaScript должен определять поведение, а не контент. Создание в JavaScript требует большей разметки (многострочные строки не так просты, как в PHP). Сложнее поддерживать, если ваш HTML генерируется в нескольких местах (PHP и JS). Вы можете использовать функции манипуляции jQuery DOM для создания своего HTML-кода, но в долгосрочной перспективе вы стреляете в ногу. Быстрее создавать HTML на сервере, чем в браузере (в вычислительном смысле). Ликвидация проще с PHP – легко создавать табличную разметку. Вы сохраняете какую-то боевую готовность, если пользователь отключил JavaScript, если вы выставляете разметку при загрузке страницы. Зачем генерировать HTML-код в jQuery: Вы сохранили бы некоторую пропускную способность. События привязки могут быть проще.
если у вас монолит и jquery на клиенте возможно. если не монолит, и есть клиенты помимо браузера (например мобилка), то лучше отдавать только данные. а клиенты будут строить интерфейс сами.
Люди, кто разбирается в JS? Помогите с кодом. Не идет. Запятые на месте. Ошибки в коде. Не получается распарсить JSON. Может быть массив кривой? Код (Javascript): $(document).ready(function() { $("#btnSearch").click(function(){ //надо проверить выбрано ли значение из списка if( $("#grz option:selected").val() !== "no_action" ){ sendAjaxForm('result_form', 'formauto', 'action_ajax_form2.php'); //$('#modal-input-on-parking').modal('show'); } return false; }); }); function sendAjaxForm(result_form, formauto, url) { $.ajax({ url: url, //url страницы (action_ajax_form.php) type: "POST", //метод отправки dataType: "JSON", //формат данных data: $("#"+formauto).serialize(), // Сеарилизуем объект success: function(response) { //Данные отправлены успешно result = $.getJSON(response); //result = $.parceJSON(response); console.log(result); var data = [result]; $.each(data, function (key, value) { $('#client_id').append('<option value="' + key.name + '">' + value.grz + '</option>'); }); }, error: function(response) { // Данные не отправлены $('#client_id').html('Ошибка. Данные не отправлены.'); } }); } PHP: if (isset($_POST['grz'])) { $autocl_id = isset($_POST['grz']) ? trim(strip_tags($_POST['grz'])) : null; $result = array(); $sql = mysqli_query($link, "SELECT `client_auto`.`autocl_id`, `client_auto`.`grz`, `client_auto`.`cars_id`, `auto_markamodel`.`marka_avto`, `auto_markamodel`.`model_avto`, `client_auto`.`client_id`, `clients`.`client_name` FROM `client_auto` JOIN `clients` ON `client_auto`.`client_id`=`clients`.`client_id` JOIN `auto_markamodel` ON `auto_markamodel`.`cars_id`=`client_auto`.`cars_id`"); while($row = mysqli_fetch_assoc($sql)) { $result['name'][] = $row['grz']; //$result[]['value'] = $row['autocl_id']; } // Переводим массив в JSON echo json_encode($result); //echo ($result); }