Я пытался передать переменную Javascript в PHP через POST xmlhttprequest, но даже текстовый литерал не работает.
Я проверил ответ на вопрос передавая переменную javascript в PHP с помощью xmlhttprequest, но в моем случае это не сработало. Ниже мой код
HTML/скрипт
<!DOCTYPE html> <html lang = "en">
<button type = "button" id = "saveButton">Save Button</button>
<script> document.getElementById('saveButton').addEventListener('click', function() {
var inst_a = new XMLHttpRequest(); inst_a.open("POST", "check_name-indev02.php");
inst_a.send("inputname=dummy");
inst_a.onreadystatechange = function() {
if (inst_a.readyState == 4 && inst_a.status == 200)
{console.info(inst_a.responseText);}
}
});
PHP
<?php if (isset($_POST['inputname']))
{echo "set";} else {echo "not set";} ?>
Я не уверен, что делаю неправильно. Консоль всегда возвращает «не установлено», что означает, что константа «пустышка» никогда не доходила до PHP. Реальная страница делает много других вещей, включая вызовы JQuery, но только эта часть не работает. Поэтому я включаю только выявленную проблему.
Если на вопрос уже дан ответ в другом вопросе, политика SO заключается в закрытии вопроса как дубликата. stackoverflow.com/help/duulates
Поскольку вы неправильно указали свой тип данных POST
, поэтому $_POST
не было заполнено.
var inst_a = new XMLHttpRequest();
inst_a.open("POST", "check_name-indev02.php");
// Need this line
inst_a.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
inst_a.send("inputname=dummy");
Установка HTTP-заголовка Content-Type: application/x-www-form-urlencoded может указать PHP проанализировать ваше POST
тело.
Упс. Я удалил эту строку, думая, что это только тогда, когда нужно проанализировать весь HTML, а не простой текст. Теперь он работает и с переменными, и с другими функциями. Большое спасибо...
@ user3467434, но вы отправляете не простой текст, а структурированные данные формы. Этот тип контента также не имеет ничего общего с html. Если вы отправляли html, для этого есть другой тип контента :-)
Вам необходимо установить заголовок Content-Type. Вот как это можно сделать:
document.getElementById('saveButton').addEventListener('click', function() {
var inst_a = new XMLHttpRequest();
inst_a.open("POST", "check_name-indev02.php", true);
// You need this line to fix you issue
inst_a.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
inst_a.onreadystatechange = function() {
if (inst_a.readyState == 4 && inst_a.status == 200) {
console.info(inst_a.responseText);
}
};
inst_a.send("inputname=dummy");
});
SetRequestHeader("Content-Type", "application/x-www-form-urlencoded"); Эта строка имеет решающее значение, поскольку она сообщает серверу, что вы отправляете данные формы (аналогично тому, что делает обычная форма HTML).
Да, я упомянул об этом в вопросе. Но я пропустил несколько строк кода. Так что это не сработало. Стоит ли удалять этот вопрос.