PHP не видит отправленные данные из ajax с помощью serializeArray()

#javascript #php #jquery #ajax

#javascript #php #jquery #ajax

Вопрос:

У меня есть форма, проходящая проверку jquery, которая затем отправляется через ajax в PHP-скрипт для обработки внутренних функций. Ajax собирает значения формы с помощью serializeArray() и надеется выполнить работу. Срабатывает скрипт, и данные отправляются (я думаю) на PHP. Я пробовал, вероятно, около 100 комбинаций для получения данных на стороне PHP, но безуспешно. Я убежден, что это должно быть просто, что-то, что я упустил из виду. Ниже приведен код для ajax, а также скриншот инструментов разработчика, показывающий, что отправляется.

Независимо от того, что я пытаюсь на стороне PHP, я либо получаю пустой массив, NULL через $ _POST / $ _GET . Я пробовал json_decode, синтаксический анализ строки, var_dump и т. Д.

 var data=$(form).serializeArray();
$.ajax({
  cache: false,
  type: "POST",
  dataType: "JSON",
  url: "process/create_site.php",
  data: data,
  success: function(response) {
    console.log(response);
    //$(form).html("<div id='message'></div>");
    //$('#message').html("<h2>Your request is on the way!</h2>")
    //  .append("<p>someone</p>")
    //  .hide()
    //  .fadeIn(1500, function() {
    //    $('#message').append("<img id='checkmark' src='images/ok.png' />");
    //  });
  }
});
 

Изображение вывода PHP из отправки ajax
Изображение отправляемого ajax

Комментарии:

1. Попробуйте var data=$(form).serialize(); вместо этого. serializeArray делает что-то немного другое. Вы можете сравнить заметки здесь: api.jquery.com/serializearray и api.jquery.com/serialize

2. Спасибо @ADyson. Что бы у вас было на стороне PHP? Дамп $ _POST а затем обработайте его оттуда, если он работает?

3. Это помогло бы, если бы мы могли видеть ваш текущий PHP. Но да, попробуйте изменить его на serialize(), а затем на стороне PHP начните с var_dump($_POST); и посмотрите, что вы получите. Если он содержит данные, то вы можете использовать его по-настоящему.

4. Поэтому я изменил его на .serialize(), и PHP содержит только var_dump($ _POST); и его отображение: array(0) { }

5. ОК. Это очень странно. И вы уверены, что data в вашем JS содержится то, что вы ожидаете?

Ответ №1:

Мне удалось разобраться в этом после смущающего количества времени. Я хотел бы опубликовать здесь простую причину, чтобы помочь другим.

Весь блок JS был завернут, $(document).ready(function(){ что приводило к удалению значений при отправке в PHP.

Я не могу найти никакой документации или ответа на вопрос с аналогичным сценарием — так что вот оно!