#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 переопределялись и не использовались. Разочарование! Но я ценю помощь и рад, что она решена.