Я делаю запрос POST из IE с помощью XDomainRequest . XDomainRequest не отправляет Content-Type в свой заголовок, и невозможно установить настраиваемый заголовок . Я думаю, это заставляет PHP не размещать post-переменные в $_POST
.
Я вижу, что параметры отправляются, если я использую file_get_contents("php://input")
но я не уверен, как правильно их разобрать, не нарушая их. Есть ли способ заставить PHP собирать параметры POST? Или как я могу получить переменные безопасно?
Я использую этот транспорт, чтобы получить XDomainRequest в jQuery и сделать этот вызов:
jQuery.post('http://domain.de/io/login', 'email=test2@stuff.de&password=xxx', function(response) { if (console) console.log(response); alert('response: ' + objectToString(response)); });
На стороне PHP у меня есть:
print_r($_REQUEST, true); echo file_get_contents("php://input");
Прекрасно работает с Firefox. Но Firefox не использует этот транспорт.
@hakre: Большое спасибо. В вашем документе описывается то, что здесь никто не верит:
Тело запроса должно интерпретироваться в соответствии с заголовком Content-Type.
Он также упоминает parse_str (), который делает именно то, что мне нужно.
Здесь мой код для заполнения $ _POST, если он не был установлен PHP:
if (count($_POST) == 0) { $request_body = file_get_contents("php://input"); parse_str($request_body, $_POST); }
Я хотел бы дать вам репутацию этого, но я не знаю, как это сделать. Во всяком случае, вы получили только 50 от меня, поэтому я надеюсь, что все будет в порядке.
Как видно из руководства jQuery.post()
, параметр данных должен быть в следующем формате:
jQuery.post('http://domain.de/io/login', {email: "test2@stuff.de", password: "xxx"}, function(response) { if (console) console.log(response); alert('response: ' + objectToString(response)); });