您好我的XHR邮寄请求有问题。
在javascript中:
self.xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
self.xhr.setRequestHeader("Method", "POST " + url + " HTTP/1.1");
在萤火虫中:
Parametersapplication/x-www-form-urlencoded
{"u":"andrepadez","m":"\n...
JSON
m
"sfdsfsdfdsfdsf"
u
"andrepadez"
Source
{"u":"andrepadez","m":"\nsfdsfsdfdsfdsf"}
在.NET中,我将其发布到.ASHX,并在ProcessRequest中执行:
StreamReader sr = new StreamReader(context.Request.InputStream, context.Request.ContentEncoding);
javaScriptSerializer.Deserialize<MyClass>(message);
我没有问题。
我不知道如何在PHP中获取数据,$ _POST和$ _REQUEST都是空数组。
请帮忙吗? 感谢
答案 0 :(得分:2)
您没有为要发送的数据设置字段名称。 PHP要求通过POST进入的数据采用fieldname=value
格式。 _POST是一个与任何其他数组一样的数组,存储在PHP数组中的每个值都必须有一个键(表单字段名称)。
您可以尝试通过阅读php:// input:
来检索数据$post_data = file_get_contents('php://input');
但最简单的解决方案是在XHR调用中提供字段名。
答案 1 :(得分:2)
您正在将内容类型设置为application/x-www-form-urlencoded
,但您要将内容设置为json。我猜这会让你的PHP网络服务器感到困惑。尝试将POST内容设置为您告诉服务器的内容(application/x-www-form-urlencoded
)或读取php://input
中的原始HTTP内容。
答案 2 :(得分:1)
如果将Content-Type
设置为application/x-www-form-urlencoded
,则自然PHP会想要解析POST正文。但由于数据实际上并不构成表格数据,因此将其视为无效。
您需要设置正确的CT application/json
(实际上并不重要),因此PHP将不管它。然后它变为php://input
或$HTTP_RAW_POST_DATA