#php #jquery #ajax #wordpress
Вопрос:
Я надеюсь, что кто-нибудь сможет помочь разобраться в этом, AJAX получает только один результат для отображения в раскрывающемся списке «Выбрать». Это выглядит так: Model1Model2Model3Model4. Я хотел выглядеть вот так
Модель 1
Модель 2
Модель 3
Модель 4
где бы это выглядело так в скрипте jquery:
$('#input_11_183').append('Model1'); $('#input_11_183').append('Model2'); $('#input_11_183').append('Model3'); $('#input_11_183').append('Model4');
и все эти данные будут добавлены в выпадающее поле выбрать
Вот мои php-коды:
lt;?php function list_of_brandcars() { $model_option = $_POST['pass_data']; $carposts = array( 'post_type' =gt; 'list_of_cars', 'post_status' =gt; 'publish', 's' =gt; $model_option ); $att = new WP_Query($carposts); $count=0; if($att-gt;have_posts()){ while($att-gt;have_posts()) : $att-gt;the_post(); while(have_rows('mods')) : the_row(); echo get_sub_field('model'); endwhile; endwhile; } die(); } add_action('wp_ajax_nopriv_list_of_brandcars', 'list_of_brandcars'); add_action('wp_ajax_list_of_brandcars', 'list_of_brandcars'); ?gt;
а вот мой скрипт jQuery
lt;scriptgt; $(document).ready(function($) { $('#input_11_11').change(function(){ var from_brand = $(this).val(); $.ajax({ type: 'POST', url: ajaxurl, data: { action: 'list_of_brandcars', pass_data: from_brand }, success: function(data) { $('#input_11_183').empty(); for (var i = 0; i lt; data.length; i ) { $('#input_11_183').append('lt;option value="' data '"gt;' data 'lt;/optiongt;'); } } }); die(); }); }); lt;/scriptgt;
Комментарии:
1. попробуйте следующие типы данных: «json», тип содержимого: «приложение/json;кодировка=utf-8» после url и Json.parse(данные); в случае успеха
2. @SyedMuhammadShakaybAthar хорошая идея для установки
dataType: "json"
, но если сервер с самого начала не выводит JSON (а это не так), то все, что это приведет к ошибке JS, когда он обнаружит, что не может проанализировать данные. И настройкаcontentType
просто не подходит для этого, потому что речь идет о том, что AJAX отправляет , а не получает . Вы можете прочитать об этом в документации jQuery $.ajax, если вам что-то неясно.3. У вас действительно есть вызываемая функция Javascript
die();
? Что он делает?
Ответ №1:
Вы выводите необработанные строки, которые просто объединяются вместе и становятся одной строкой текста в ответе. Вам нужно вывести некоторые структурированные данные в формате JSON. Для этого сначала создайте массив, а затем добавьте в него каждый фрагмент текста.
Вот пример. Я добавил комментарии везде, где я что-то добавил или изменил в коде:
PHP
$att = new WP_Query($carposts); $count=0; $response = array(); //make empty array if($att-gt;have_posts()){ while($att-gt;have_posts()) : $att-gt;the_post(); while(have_rows('mods')) : the_row(); $response[] = get_sub_field('model'); //add to the array endwhile; endwhile; } echo json_encode($response); //encode the array as JSON and output it die();
язык JavaScript:
$.ajax({ type: 'POST', url: ajaxurl, dataType: "json", //tell jQuery to expect JSON in the response, and automatically parse it data: { action: 'list_of_brandcars', pass_data: from_brand }, success: function(data) { $('#input_11_183').empty(); for (var i = 0; i lt; data.length; i ) { $('#input_11_183').append('lt;option value="' data[i] '"gt;' data[i] 'lt;/optiongt;'); //access the correct element of (what is now) an array of strings. } } });
Комментарии:
1. спасибо, это работает.. Большое тебе спасибо, брат
2. Без проблем. Если ответ вам помог, пожалуйста, не забудьте отметить его как «принято» (вы можете нажать на галочку рядом с вопросом, чтобы он стал зеленым). Спасибо 🙂
3. Спасибо. Я тоже только что узнал эту вещь.