Как получить доступ к данным формы в виде массива объекта json в PHP - PullRequest
0 голосов
/ 21 января 2019

У меня есть jquery ajax, отправляющий данные формы в функцию Word Press.Функция PHP получает данные в виде строки типа «navn = A & navn2 = B», и я использую функцию explode () для доступа к отдельным элементам формы.

Я думаю, что есть лучший способ получить доступ кформировать данные в виде массива непосредственно из объекта json.Но я не могу понять это.

Я надеюсь, что вы можете дать мне несколько советов.

Это мой HTML / jquery:

<form id='minForm' method="post" action="">
  <input type="text" name="navn" value="A">
  <input type="text" name="navn2" value="B">
  <button>Send</button>
</form>

<script>
jQuery(document).ready(function($) {
  var form = $('#minForm');
  $(form).submit(function(event) {
    event.preventDefault();
    var formData = $(form).serialize();
    $.ajax({
      type: "POST",
      url: '/wp-admin/admin-ajax.php',
      data: {
        action     : 'my_ajax_action',
        formData   : formData,
      },
      success:function(data) {
        console.log(data);
      },
    });
  });
});
</script>

Это мой PHP:

add_action( 'wp_ajax_my_ajax_action', 'my_ajax_action_callback' );

function my_ajax_action_callback(){
  $form_data = $_POST['formData'];
  $form_data_array = explode('&', $form_data);
  foreach ($form_data_array as $i) {
    echo explode('=', $i)[1] . '<BR>';
  }
  wp_die(); // required. to end AJAX request.
}

1 Ответ

0 голосов
/ 21 января 2019

Сериализация вашей формы в виде массива.Затем передайте его в Ajax-запросе.

На стороне клиента:

jQuery(document).ready(function($) {

      var form = $('#minForm');
      $(form).submit(function(event) {
        event.preventDefault();
        var formData = $(form).serializeArray();
        $.ajax({
          type: "POST",
          url: '/wp-admin/admin-ajax.php',
          dataType: 'json',
          data: {
            action     : 'my_ajax_action',
            formData   : formData,
          },
          success:function(data) {
            console.log(data);
          },
        });
      });
    });

На стороне сервера:

add_action( 'wp_ajax_my_ajax_action', 'my_ajax_action_callback' );

function my_ajax_action_callback(){
  $response = ["success" => true];
  $form_data = json_decode($_POST['formData']);
  error_log(print_r($form_data, 1)); // Log to see the array properties.
  if (empty($form_data) {
      $response["success"]  = false;
  }
  echo json_encode($response);
  //wp_die(); // required. to end AJAX request.
}

Примечание: $(form).serializeArray() дастВы представляете форму как массив из объектов , и это может быть не то, что вы ожидаете на стороне сервера для извлечения данных.Вы можете обработать массив форм перед отправкой на сервер, преобразовав его в простой объект :

var formData = $(form).serializeArray().reduce(function(obj,item){
     obj[item.key] = item.value; 
     return obj;
}, {});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...