我有一个包含JSON数据的jQuery post方法。
在我的httphandler中,在processRequest方法中,Request [“Operation”]为空,并且我的数据都没有发布。我在SharePoint 2010环境中。
public void ProcessRequest(HttpContext context)
{
try
{
string operation = context.Request["Operation"]; // Returns null
我的JavaScript如下:
function CallService(serviceData, callBack) {
$.ajax({
type: "POST",
url: ServiceUrl,
data: { Operation : "activate"},
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (result) {
callBack(result);
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert(XMLHttpRequest.responseText);
}
});
在VS中的调试器中,当我评估HttpContext时,找不到发布的值。在Firebug中,该值将作为有效的JSON数据发布。我无法获得参数的任何原因?
任何帮助表示感谢。
答案 0 :(得分:1)
感谢所有输入人员。我决定改为读取请求的输入流,并从中获取一个键值对。我可以通过这种方式访问我的所有参数。
我也使用$ .toJSON()函数将我的参数传递给Ajax调用。 JsonConvert类来自Newtonsoft的JSON.Net程序集。我经常使用它,如果你使用任何json序列化的东西,我强烈推荐使用它。
顺便说一下,改变输入参数周围的引号确实有效。我想继续使用一个通用的ajax函数并使用$ .toJSON函数,并且通常传递一个带有我所有参数的对象作为帖子数据。
TextReader reader = new StreamReader(context.Request.InputStream);
Dictionary<string, string> requestParams = JsonConvert.DeserializeObject<Dictionary<string, string>>(reader.ReadToEnd());
try
{
switch (requestParams["operation"])
答案 1 :(得分:1)
我将内容类型更改为application/x-www-form-urlencoded
并且它实现了一个技巧
答案 2 :(得分:0)
也许你受到Same Origin Policy的限制。 ServiceUrl
与主叫页面在同一主机名和域中吗?
答案 3 :(得分:0)
为什么要覆盖contentType
来电中的$.ajax()
选项?如果省略,那么您是否仍然会看到Operation
值的空白?
另外,我认为JSON数据的正确格式是:
{"Operation": "activate"}
我认为JSON规范是特定的,但大多数框架并不严格。