AJAX получает несколько результатов от PHP

#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. Спасибо. Я тоже только что узнал эту вещь.