2010-07-14 142 views
4

我有一个包含JSON数据的jQuery post方法。jQuery POST。无法使用自定义httphandler获取请求参数

在我的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

你尝试 '应用程序/ x-WWW的形式了urlencoded' 内容类型呢?那么你可以避免json字符串的解析。 – Ajaxe 2010-09-14 15:25:37

回答

0

也许你受到Same Origin Policy的限制。 ServiceUrl与主叫页面处于相同的主机名和域吗?

0

为什么你在你的$.ajax()调用中覆盖contentType选项?如果你忽略了这个,你是否仍然看到null为Operation值而被发送?

另外,我觉得对JSON数据格式正确应为:

{"Operation": "activate"} 

我认为JSON规范是具体有关,但大多数的框架都没有那么严格。

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

我改变的contentType到application/x-www-form-urlencoded和它做了一个绝招

相关问题