XHR请求PHP

时间:2011-08-19 14:49:29

标签: php xmlhttprequest

您好我的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都是空数组。

请帮忙吗? 感谢

3 个答案:

答案 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