Отправить несколько фрагментов данных через .ajax () для обработки в PHP-скрипте

#jquery #ajax #timer

#jquery #ajax #таймер

Вопрос:

Я пытаюсь отправить две отдельные группы информации через .ajax () в PHP-скрипт для обработки и столкнуться с проблемами.

В этом сценарии пользователь заходит на страницу, и 1) таймер начинает отсчет секунд, и 2) пользователь должен заполнить серию входных данных для формы. Я хотел бы отправить обе группы информации (текущее количество таймеров и все пользовательские данные) в PHP-скрипт, когда пользователь нажимает кнопку отправки.

Я могу успешно отправить либо одну группу информации, либо другую, но не могу найти способ отправить обе группы данных одновременно через .ajax () одновременно.

Вот jQuery, который у меня есть сейчас, который пытается отправить обе части данных, но терпит неудачу:

  $(document).ready(function(){
    var count = 0;
    setInterval(function(){
        count  ;
        $('#timer').html(count   ' secs.');
    },1000);

// displays user structureand suggested answers on structure page
$('#process_structure').click(function () {
    var text = $.ajax ({
        type: "POST",
        url: "structure_process.php",
        data: $('#inputs_structure').serialize(), data: {count: count},
        dataType: "json",
        async: false,
    }).responseText;
    $('#test_ajax').html(text); 
})
});
  

Любые указания были бы высоко оценены. Спасибо!

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

1. таймер может быть установлен на стороне сервера, чтобы пользователь не мог им манипулировать. Для этого вы можете использовать переменную сеанса. таймер внешнего интерфейса может быть просто фиктивным

Ответ №1:

Предполагая, что structure_process.php принимает обе части данных вместе, вы можете использовать serializeArray() вместо serialize() , добавить свой дополнительный фрагмент данных, а затем использовать jQuery.param() для преобразования массива в строку, которая jQuery.ajax() будет принимать.

 $('#process_structure').click(function () {
    var postData = $('#inputs_structure').serializeArray();
    postData.push({name: 'count', value: count});
    var text = $.ajax ({
        type: "POST",
        url: "structure_process.php",
        data: $.param(postData),
        dataType: "json",
        async: false,
    }).responseText;
    $('#test_ajax').html(text);
});
  

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

1. Интересно. И я должен быть в состоянии извлечь данные подсчета в structure_process.php используя $_POST[‘count’]? Возможно, мне чего-то не хватает, но я только что попробовал ваш код и получил доступ к счетчику через $ _POST и не смог его получить

2. Да, это добавило бы (должно было) дополнительное значение с именем count к данным POST.

3. Хм. то, что вы говорите, имеет смысл для меня, но я не могу заставить это работать. Я получаю ошибку «неопределенный индекс: количество» при попытке опубликовать. Есть идеи, почему?

4. Вы можете выполнить console.log или что-то эквивалентное на postData после push() вызова, если хотите проверить, правильно ли настроен массив, но это должно работать нормально. Возможно, что-то было потеряно при переводе между здесь и вашим кодом; вы могли бы опубликовать то, что вы пробовали, но это не сработало.

5. Спасибо, Джон! Это сработало отлично. Ранее у меня были проблемы, потому что, когда я работал над этой страницей, я включил более раннюю версию того же AJAX-вызова в <head> и забыл об этом. Таким образом, все новые правки в моем основном js src переопределялись и не использовались. Разочарование! Но я ценю помощь и рад, что она решена.