【问题标题】:Trouble passing JSON to a Web service将 JSON 传递给 Web 服务时遇到问题
【发布时间】:2016-02-11 11:44:28
【问题描述】:

我有一个如下所示的对象:

{
    "json": [{
        "Contract": "....", 
        "SupervisorID": "..."
    },{
        "Contract": "...", 
        "SupervisorID": "..."
    }]
}

上面的对象是这样构建的。我得到选中的复选框并将它们的 ID 添加到对象数组中。

var jsonArr = [];
    var sps = $('#measuresUnApprovedModal').find('[name="chkbox_op"] input[type="checkbox"]:checked');
    sps.each(function (i) {
        var id = $(this).attr("id");
        var idParts = id.split("_");
        jsonArr.push({
            "Contract": idParts[1],
            "SupervisorID" : idParts[2]
        });
    });

如何在服务器端获取这些值?我当前的尝试如下所示:

$.ajax({
        type: "POST",
        url: "[REMOVED]",
        data: { json: jsonArr },
        contentType: "application/json; charset=utf-8",
        dataType: "json"
    }).done(function (msg) {
        if (msg.d) {
            alert("Success");
        }
        else { alert("Error has occured."); }
    }).fail(function () {
        alert("An unexpected error has occurred during processing.");
    });

还有网络服务:

[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
 public string SendEmail(List<SupervisorToEmail> json)
    {
        return "Hi";
    }
}

public class SupervisorToEmail
{
    public string Contract { get; set; }
    public string SupervisorID { get; set; }
}

public class Supervisors
{
    private List<SupervisorToEmail> SupervisorsToEmail { get; set; }
}

【问题讨论】:

  • 哦,就这么定了,我刚把它删了就在这里发帖了 :) Edt:添加了 URL
  • 请求是本地的,url是这样的 url: "DailyMeasuresServiceHandler.asmx/SendEmail",
  • 您似乎在一个名为json 的属性中双重包装了对象。试试data: jsonArr,
  • 我添加了一些代码来显示数组是如何构建的,我不认为我是双重包装的?
  • 现在更改 SendEmail 方法的签名:SendEmail(List&lt;SupervisorToEmail&gt; json)

标签: c# jquery arrays json web-services


【解决方案1】:

我认为问题出在您的 ajax 请求中,您需要向 jQuery 传递一个 JSON 字符串作为数据参数,而不是 JavaScript 对象,这样 jQuery 就不会尝试对您的数据进行 URLEncode。

这应该可行:

$.ajax({
		url: "[REMOVED]",
		type: "POST",              
		data: JSON.stringify({ json: jsonArr }),
		contentType: "application/json; charset=utf-8",
		dataType: "json"
		}).done(function (msg) {
		if (msg.d) {
			alert("Success");
		}
		else {
			alert("Error has occured.");
		}
		}).fail(function () {
		alert("An unexpected error has occurred during processing.");
});

【讨论】:

    【解决方案2】:

    不确定我做了什么,但以下是结果代码:

    [WebMethod]
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
    public string SendEmail(List<SupervisorToEmail> Supervisors)
    {
        foreach (SupervisorToEmail supervisor in Supervisors)
        {
        }
        return null;
    }
    
    public class SupervisorToEmail
    {
        public string Contract { get; set; }
        public string SupervisorID { get; set; }
    }
    

    还有 Jquery:

    $('#btnSendUnApprovedEmail').click(function () {
            var jsonArr = new Array();
            var sps = $('#measuresUnApprovedModal').find('[name="chkbox_op"] input[type="checkbox"]:checked');
            sps.each(function (i) {
                var id = $(this).attr("id");
                var idParts = id.split("_");
    
                var obj = new Object();
                obj.Contract = idParts[1];
                obj.SupervisorID = idParts[2];
                jsonArr.push(obj);
            });
            var data = JSON.stringify(jsonArr);
            alert(data);
            $.ajax({
                type: "POST",
                url: "DailyMeasuresServiceHandler.asmx/SendEmail",
                data: JSON.stringify({ Supervisors : jsonArr}),
                contentType: "application/json; charset=utf-8",
                dataType: "json"
            }).done(function (msg) {
                if (msg.d) {
                    alert("Success");
                }
                else { alert("Error has occured."); }
            }).fail(function () {
                alert("An unexpected error has occurred during processing.");
            });
        });
    

    【讨论】:

      猜你喜欢
      • 2014-12-26
      • 1970-01-01
      • 2018-08-28
      • 1970-01-01
      • 1970-01-01
      • 2011-07-07
      • 2011-02-02
      • 2012-04-12
      • 1970-01-01
      相关资源
      最近更新 更多