В php, как получить текстовое / простое значение метода send () XMLHttpRequest - PullRequest
4 голосов
/ 13 сентября 2011

Понятия не имею, как получить "Hello World!" в PHP для следующих кодов Javascript.
Я знаю, что могу использовать $ _POST [''], если тип контента был «application / x-www-form-urlencoded», но не для «text / plain».

var xhr = new XMLHttpRequest();
xhr.open('POST', 'example.php', true);
xhr.setRequestHeader('Content-Type', 'text/plain');
xhr.send('Hello World!');

Ответы [ 3 ]

7 голосов
/ 05 апреля 2012

Этот PHP будет считывать необработанные данные из тела запроса:

$data = file_get_contents('php://input');

Строка 3:

xhr.setRequestHeader('Content-Type', 'text/plain');

не требуется, так как публикация простого текста установит тип содержимого натекст / простой текст; кодировка = UTF-8
http://www.w3.org/TR/XMLHttpRequest/#the-send-method

4 голосов
/ 13 сентября 2011

В вашем запросе есть несколько ошибок.Вы не можете POST данные без использования application/x-www-form-urlencoded.Во-вторых, «Hello World!» Не экранируется и не присоединяется к переменной.

Ниже приведен код JavaScript для отправки данных POST на сервер.

var xhr = new XMLHttpRequest();
var params = 'x='+encodeURIComponent("Hello World!");
xhr.open("POST", 'example.php', true);
xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xhr.setRequestHeader("Content-length", params.length);
xhr.setRequestHeader("Connection", "close");
xhr.onreadystatechange = function() {
    if(xhr.readyState == 4 && xhr.status == 200) {
        alert(xhr.responseText);
    }
}
xhr.send(params);

Вы можете получить к нему доступ с помощью $_POST['x'] в PHP.

В качестве альтернативы вы используете $_GET['x'], используя следующий код.

var xhr = new XMLHttpRequest();
var params = encodeURIComponent("Hello World!");
xhr.open("GET", 'example.php?x='+params, true);
xhr.onreadystatechange = function() {
    if(xhr.readyState == 4 && xhr.status == 200) {
        alert(xhr.responseText);
    }
}
xhr.send(null);

GET больше соответствует идее использования Content-type: text/plain.

0 голосов
/ 13 сентября 2011

Вы можете попробовать http_get_request_body (http://php.net/manual/en/function.http-get-request-body.php)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...