jQuery POST。无法使用自定义httphandler获取Request参数

时间:2010-07-14 16:53:40

标签: jquery sharepoint 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数据发布。我无法获得参数的任何原因?

任何帮助表示感谢。

4 个答案:

答案 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规范是特定的,但大多数框架并不严格。