jQuery POST。 无法使用自定义httphandler获取请求参数
我有一个包含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数据发布。 我无法获得参数的任何原因?
任何帮助赞赏。
感谢所有输入的人。 我决定改为读取请求的输入流,并从中获取一个键值对。 我可以通过这种方式访问我的所有参数。
我也使用$ .toJSON()函数将我的参数传递给Ajax调用。 JsonConvert类来自Newtonsoft的JSON.Net程序集。 我经常使用它,如果你使用任何json序列化的东西,我强烈建议使用它。
顺便说一句,改变输入参数周围的引号确实有效。 我想继续使用一个通用的ajax函数并使用$ .toJSON函数,并且通常传递一个带有我所有参数的对象作为post数据。
TextReader reader = new StreamReader(context.Request.InputStream); Dictionary requestParams = JsonConvert.DeserializeObject>(reader.ReadToEnd()); try { switch (requestParams["operation"])
我将contentType更改为application/x-www-form-urlencoded
并且它做了一个技巧
也许你受到同源政策的限制。 ServiceUrl
与调用页面在同一主机名和域中吗?
为什么要覆盖$.ajax()
调用中的contentType
选项? 如果省略它,是否仍然看到为Operation
值发送空值?
另外,我认为JSON数据的正确格式是:
{"Operation": "activate"}
我认为JSON规范是具体的,但大多数框架并不严格。