Невозможно передать даже текстовую константу в PHP с помощью XMLHttpRequest

Я пытался передать переменную 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, но только эта часть не работает. Поэтому я включаю только выявленную проблему.

Да, я упомянул об этом в вопросе. Но я пропустил несколько строк кода. Так что это не сработало. Стоит ли удалять этот вопрос.

user3467434 18.08.2024 04:14

Если на вопрос уже дан ответ в другом вопросе, политика SO заключается в закрытии вопроса как дубликата. stackoverflow.com/help/duulates

Don't Panic 18.08.2024 08:28
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
2
52
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Поскольку вы неправильно указали свой тип данных 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 15.08.2024 06:38

@ user3467434, но вы отправляете не простой текст, а структурированные данные формы. Этот тип контента также не имеет ничего общего с html. Если вы отправляли html, для этого есть другой тип контента :-)

ADyson 15.08.2024 10:27

Вам необходимо установить заголовок 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).

Другие вопросы по теме