Задать вопрос
@lexaxaxa

Можно ли очищать textarea из тела AJAX(для PHP)?

Можно ли очищать textarea из тела AJAX? Решил попробовать усовершенствовать переписку, убрав перегрузку страницы.
Перегрузка страницы исчезла, но value textarea очищается только при первом AJAX, который инициируется нажатием кнопки сабмит. В последующие разы поле нужно очищать самому. В чем причина?Интересует пока только AJAX для PHP.
  • Вопрос задан
  • 222 просмотра
Подписаться 3 Оценить 5 комментариев
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    Профессиональная вёрстка на HTML и CSS
    3 месяца
    Далее
  • Stepik
    Основы HTML и CSS
    2 недели
    Далее
  • OTUS
    HTML/CSS
    3 месяца
    Далее
Решения вопроса 1
Petroveg
@Petroveg
Миром правят маленькие с#@&ки
Вот так примерно стоит реализовывать чат на XMLHttpRequest

HTML
<form action="" data-action="chat">
	<input type="hidden" name="user" value="Вася">
	<textarea name="message" cols="30" rows="10"></textarea>
	<br>
	<button type="submit">Отправить</button>
	<div data-container="response"></div>
</form>

JS
document.addEventListener('keydown', function (e) {
	if (e.ctrlKey && e.keyCode == 13 && e.target.name == 'message') {
		e.preventDefault();
		sendMessage(e.target.form);
	}
});
document.addEventListener('submit', function (e) {
	if (e.target.dataset && e.target.dataset.action == 'chat') {
		e.preventDefault();
		sendMessage(e.target);
	}
});

function sendMessage (form) {
	var sendData = [];

	for (var i = 0; i < form.elements.length; i++) {
		if (form.elements[i].name && form.elements[i].value) {
			sendData.push(form.elements[i].name + '=' + encodeURIComponent(form.elements[i].value));
		}
	}

	if (sendData.length && form.message.value) {
		var request = new XMLHttpRequest();

		request.addEventListener('readystatechange', function (data) {
			if (this.readyState == 4 && this.status >= 200 && this.status < 400) {
				if (!form.response) {
					form.response = form.querySelector('[data-container="response"]');
				}

				form.message.value = '';
				//form.response.innerHTML = data.responseText;
				form.response.innerHTML = 'Отправлено<br>' + sendData.join('&');
			}
		});
		request.open('POST', form.action);
		request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
		request.send(sendData.join('&'));
	}
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
IonDen
@IonDen
JavaScript developer. IonDen.com
Покажите код, вы явно что-то не так делаете.

Обычно это так работает:
$("#myForm").on("submit", function (e) {
    e.preventDefault();
    var $this = $(this);
    var data = $this.serialize();

    $.ajax({
        ... send data
        success: function () {
            $this.find('textarea').prop('value', '');
        }
    })
});


Вот пример, очищается каждый раз: jsfiddle.net/IonDen/gvchpvfs
Ответ написан
@lexaxaxa Автор вопроса
<script>
document.getElementById("submit").onclick = handleButtonPress;
var httpRequest;
function handleButtonPress(e) {
e.preventDefault();
var form = document.getElementById("fruitform");
var formData = "";
var inputElements = document.getElementsByTagName("textarea");
for (var i = 0; i < inputElements.length; i++) {
formData += inputElements[i].name + "="
+ inputElements[i].value + "&";}
   
document.getElementsByTagName("textarea")[0].value="";


httpRequest = new XMLHttpRequest();
httpRequest.onreadystatechange = handleResponse;
httpRequest.open("POST", form.action);
httpRequest.setRequestHeader('Content-Type',
'application/x-www-form-urlencoded');
httpRequest.send(formData);
}
function handleResponse() {
if (httpRequest.readyState == 4 && httpRequest.status == 200) {
document.getElementById("results").innerHTML
= httpRequest.responseText;

}
}
</script>
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы