Jquery Ajax post方法给出空值

Posted

技术标签:

【中文标题】Jquery Ajax post方法给出空值【英文标题】:Jquery Ajax post method giving null value 【发布时间】:2016-01-12 06:34:22 【问题描述】:

我正在学习 Jquery Ajax 方法。我尝试发布一个 json 字符串,它使用 $.post 方法工作,但不能在 $.Ajax 方法中工作。它给出了 500 错误。请给出一些建议

---- $.post--- 方法 // 工作

   $.post("About.aspx?type=Test",  'Data': '["Key":"454","Value":["1","3"],"Key":"496","Value":["1","2","3"]]' , function (result) 
                alert(result.d);
            );
   ----c#-----
    public void add()
    
        string value = Request.Form["Data"];
    

------$.Ajax post--------- 方法 // 不工作。但 如果我将数据传递为“'data':'1'”--working

      $.ajax(
                type: "POST",
                url: "Contact.aspx/add",
                dataType: "json",
                data:  "'Data': '['Key':'454','Value':['1','3'],'Key':'496','Value':['1','2','3']]'",
                contentType: "application/json; charset=utf-8",
                success: function (response) 

                ,

                error: function (msg) 
                    alert(msg.status);
                
            );
  -----c#----
   [WebMethod]
    public static void add( string Data)
    
    

【问题讨论】:

data 请求中的 data 值不是 JSON,它只是一个字符串。你为什么要用反斜杠转义所有双引号? 不要转义data,只需用单引号将整个数据括起来' @dreamweiver 单引号或双引号在 javascript/json 中无关紧要。不 - 他根本不应该用引号将整个数据括起来,因为它是一个字符串。 【参考方案1】:

更新:

我可能误解了您想要的内容 - 所以如果您真的想将 json 作为字符串发送到服务器,那么您的 data 应该如下所示:

data: 
    roleList : JSON.stringify(["Key":"454","Value":["1","3"],"Key":"496","Value":["1","2","3"]])
,

似乎您希望 roleList 作为您的 POST 变量名称; 而且在这里使用内置函数JSON.stringify() 要容易得多。现在几乎每个浏览器都支持它。

有关 contentType 的其他信息:contentType 给了我一些奇怪的问题。似乎您最好不要使用它,因为您应该可以使用默认设置。有关详细信息,请参阅此问题:Cannot set content-type to 'application/json' in jQuery.ajax

原始答案:JSON 你的 data 值是无效的 JSON 而只是一个字符串。加上contentType 无效。你完全可以不设置contentType,只使用默认设置:

$.ajax(
    type: "POST",
    url: "Contact.aspx/add",
    dataType: "json",
    data: roleList:["Key":"454","Value":["1","3"],"Key":"496","Value":["1","2","3"]],
    //contentType: "application/json; charset=utf-8",
    success: function (response) 
        console.log(response);
    ,

    error: function (msg) 
        console.log("error: ", msg.status);
    
);

【讨论】:

如果我不指定内容类型,它就没有命中网络方法。字符串参数在方法中。所以我使用 JSON.stringify 方法将 javascript 对象转换为字符串并传递。如果我只传递了一个像“'data':'1'”这样的数据正在工作。但这不起作用 @nichu09 请查看我的更新答案。试试我的 JSON.stringify 版本并告诉我它是否适合你(对我来说确实如此 - 但我在服务器端安装了 php JSON.stringify 使用将 javascript 对象转换为字符串。我作为字符串传递的那个输出。如果我作为 javascript 对象传递,您将无法看到该值。所以我之前做了这行代码并传递了值。但是使用内容类型 'data' :'1'" 是有效的。所以为什么不这样做呢。感谢帮助

以上是关于Jquery Ajax post方法给出空值的主要内容,如果未能解决你的问题,请参考以下文章

JQuery ajax - 如何传递具有空值的数组参数

laravel 4持续数据正在进行 - jquery ajax提交

laravel 4持续数据正在进行 - jquery ajax提交

如何使 JQuery-AJAX 请求同步

jQuery ajax url 参数 drupal 服务器

数据从 AJAX 调用传递到控制器但获取空值