У меня есть форма с несколькими полями для ввода текста и выпадающим списком. Содержимое раскрывающегося списка создается сценарием php для соответствия структуре базы данных. То, что я пытаюсь сделать, это позволить пользователю выбрать опцию из выпадающего списка, а затем в соответствии с выбором обновить представление формы, загрузив некоторый текст из базы данных, а затем вставить его для редактирования пользователем (стиль AJAX, который является). Я снова генерирую всю форму с помощью php, чтобы добавить запрашиваемый контент в представление.
Вот проблема: теперь, когда пользователь внес изменения в текстовое содержимое полей ввода, он нажимает кнопку «Подтвердить изменения». Теперь мне нужно получить измененное содержимое текстовых полей, чтобы обновить строку в базе данных. Я не знаю, как правильно это сделать.
Я пытаюсь использовать POST-метод формы для доставки измененного контента в php-скрипт, но он не может получить какой-либо контент, потому что AJAX-стиль на самом деле не изменил HTML страницы.
Вот краткое описание того, как я пытаюсь этого достичь:
Заголовок страницы:
<head>
<script>
function updateForm(str) {
if (window.XMLHttpRequest) {
xmlhttp=new XMLHttpRequest();
}
xmlhttp.onreadystatechange=function() {
if (xmlhttp.readyState==4 && xmlhttp.status==200) {
document.getElementById("divContainingForm").innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open("POST","/scripts/regenerateTheForm.php",true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send("id=" + str);
}
</script>
</head>
Тело страницы:
<form action="/scripts/changeTheOldOne.php" method="post">
<div id="form">
<fieldset>
<label for='list'>Content to edit</label>
<select id='list' name="list" onchange='updateForm(this.value)' autofocus>
<?php echo(generateListOptions()); ?> //php-function
</select>
</fieldset>
<fieldset>
<label for="header">Header</label>
<input required type="text" id="header" />
</fieldset>
<fieldset>
<label for="body">Plain text</label>
<textarea required id="body" rows="16" maxlength="1500"></textarea>
</fieldset>
</fieldset>
</div>
</form>
Функция из регенерировать. TheFrom.php возвращает сгенерированную форму, в которой теперь есть текст в полях, а JavaScript записывает его на странице и обновляет представление пользователя. Теперь пользователь может просматривать извлеченное содержимое и редактировать его, но когда форма отправлена, changeTheOldOne.php не может получить обновленный AJAX и отредактированные пользователем значения формы из массива $ _POST.