Javascript + PHP $ _POST массив пуст

При попытке отправить запрос 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

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


person Peterim    schedule 20.04.2010    source источник


Ответы (4)


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

xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); 
person Casey Chu    schedule 20.04.2010

Отправить

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

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

person Tomalak    schedule 20.04.2010

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

xmlhttp.open("POST", "script.php", true);
xmlhttp.send("foo=bar&answer=42");
person Vincent    schedule 20.04.2010

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

Я совершил идиотскую ошибку, объединив несколько строк, которые я хотел использовать в качестве параметров, и ТОГДА вызвал encodeURIComponent для всей партии. Это, конечно, означало, что

foo=bar&this=that

стал

foo%3Dbar%26this%3Dthat

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

person David John Welsh    schedule 12.06.2011