Javascript + PHP $ _POST массив пустой - PullRequest
2 голосов
/ 20 апреля 2010

При попытке отправить POST-запрос через xmlhttp.open("POST", "url", true) (javascript) на сервер я получаю пустое $_POST array.

Firebug показывает, что данные отправляются. Вот строка данных из Firebug: a=1&q=151a45a150.... Но $_POST['q'] ничего не возвращает.

Интересно то, что file_get_contents('php://input') имеет мои данные (строка выше), но PHP почему-то их не распознает. Пробовал оба $ _POST и $ _REQUEST, ничего не работает.

Заголовки отправляются:

POST /test.php HTTP/1.1
Host: website.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.3) Gecko/20100401        Firefox/3.6.3
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us;q=0.7,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Referer: http://website.com/
Content-Length: 156
Content-Type: text/plain; charset=UTF-8
Pragma: no-cache
Cache-Control: no-cache

Спасибо за любые предложения.

Ответы [ 4 ]

4 голосов
/ 20 апреля 2010

Похоже, вам не хватает правильного заголовка Content-Type. Это необходимо для запросов POST:

xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); 
2 голосов
/ 20 апреля 2010

Отправить

Content-Type: application/x-www-form-urlencoded

заголовок вместо text/plain

0 голосов
/ 12 июня 2011

Просто потратил часы, пытаясь найти решение этой самой проблемы.

Я совершил идиотскую ошибку, связав несколько строк, параметрами которых я хотел быть, и затем вызвал encodeURIComponent для всего лота. Это, конечно, означало, что

foo=bar&this=that

стал

foo%3Dbar%26this%3Dthat

, что, конечно, бессмысленно для сценария PHP. Хотя я сомневаюсь, что может быть много людей, которые будут делать что-то столь же глупое, как это, я надеюсь, что это спасет кого-то от головной боли, которую я только что себе дал ...

0 голосов
/ 20 апреля 2010

Вы должны написать это так:

xmlhttp.open("POST", "script.php", true);
xmlhttp.send("foo=bar&answer=42");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...