XHR запрос в PHP - PullRequest
       11

XHR запрос в PHP

0 голосов
/ 19 августа 2011

Привет, у меня проблемы с почтовым запросом XHR.

в JavaScript:

self.xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
self.xhr.setRequestHeader("Method", "POST " + url + " HTTP/1.1");

В Firebug:

Parametersapplication/x-www-form-urlencoded
{"u":"andrepadez","m":"\n...    
JSON    
m
    "sfdsfsdfdsfdsf"    
u
    "andrepadez"
Source
{"u":"andrepadez","m":"\nsfdsfsdfdsfdsf"}

В.это в .ASHX, и в ProcessRequest я делаю:

StreamReader sr = new StreamReader(context.Request.InputStream, context.Request.ContentEncoding);
javaScriptSerializer.Deserialize<MyClass>(message);

, и у меня нет проблем.

Я не знаю, как получить данные в PHP, либо $ _POSTи $ _REQUEST - пустые массивы.

Любая помощь, пожалуйста?спасибо

Ответы [ 3 ]

2 голосов
/ 19 августа 2011

Вы устанавливаете Content-Type на application/x-www-form-urlencoded, но вы устанавливаете контент на json.Я предполагаю, что это сбивает с толку ваш PHP веб-сервер.Попробуйте установить содержимое POST так, как вы сообщаете серверу (application/x-www-form-urlencoded), или прочитайте необработанное содержимое HTTP в php://input.

2 голосов
/ 19 августа 2011

Вы не установили имя поля для отправляемых данных.PHP требует, чтобы данные, поступающие через POST, имели формат fieldname=value._POST - это массив, как и любой другой, и каждое значение, хранящееся в массиве PHP, должно иметь ключ (который является именем поля формы).

Вы можете попытаться получить данные, прочитав из php: // input:

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

Но самое простое решение - предоставить имя поля в вашем вызове XHR.

1 голос
/ 19 августа 2011

Если вы установите Content-Type на application/x-www-form-urlencoded, то, естественно, PHP захочет проанализировать тело POST. Но поскольку данные фактически не составляют данные формы, они отбрасываются как недействительные.

Вам нужно установить правильный CT application/json (на самом деле это не имеет значения), чтобы PHP оставил его в покое. Затем он становится доступным как php://input или $HTTP_RAW_POST_DATA

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