从asp.net webservice解析Json数据并在asp.net下拉列表中填充它

时间:2018-02-07 17:50:40

标签: javascript jquery asp.net json

我正在尝试填充从我的网络服务返回为JSON的asp.net下拉列表。

的WebService

 [WebMethod(EnableSession = true)]
    public string GetActiveDepositAccountsForLoanAlert(string customerId)
    {
        var data = BusinessLayer.SMS.SmsSetup.GetActiveDepositAccountsForLoanAlert(customerId.ToLong());
        var json = new JavaScriptSerializer().Serialize(data);
        return json;
    }

webservice返回

  

[{ “账户号码”: “NS-0000092”},{ “账户号码”: “6MR-0000002”},{ “账户号码”: “1YFD-0000007”}]

我从ajax调用中调用数据并将其填充到我的下拉列表中。

调用Ajax

 function GetActiveDepositAccounts(customerrId) {
            var customerId = $('#CustomerIdHiddenField').val();
            var data = { customerId: $('#CustomerIdHiddenField').val() };
            var json_data = JSON.stringify(data);
            $.ajax({
                type: "POST",
                url: "/WebMethods/Misc.asmx/GetActiveDepositAccountsForLoanAlert",
                data: json_data,
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: OnSuccess,
                failure: function (response) {
                    alert(response.d);
                }
            });
               
        }
        function OnSuccess(r) {
            var depositRadioList = $("[id*=DepositAccountDropDownList]");
            depositRadioList.empty().append('<option selected="selected" value="0">Please select</option>');
            for (var i = 0; i < r.d.length; i++) {
                depositRadioList.append('<option>' + r.d[i] + '</option>');
            }
        }

数据在json中填充。在我的下拉列表中,我只希望帐号为 NS-0000092。我在我的dropdown.i中得到了整个json。在这里搜索并看到了很多关于这个Json解析的东西的问题。但是无法抓住这个。我不是没有尝试过,我是新手,所以之前将此标记为重复,请一次查看代码。谢谢。

2 个答案:

答案 0 :(得分:1)

我无法感觉到,因为你的GetActiveDepositAccountsForLoanAlert正在返回一个字符串而不是一个对象,所以r.d被视为一个字符串。尝试两件事之一。之一:

  1. 更改方法签名以返回数据类型,不要使用JavaScriptSerializer。或者,
  2. 在OnSuccess函数中,添加var data = JSON.parse(r.d)并在for循环中使用该变量。

答案 1 :(得分:0)

单个对象返回

如果通过&#34; 整个json &#34;,您的意思是每个选项获得一个{"AccountNumber":"6MR-0000002"} - 尝试输出目标AccountNumber对象的值(例如r.d[i].AccountNumberr.d[i]["AccountNumber"])。

修改函数

    var depositRadioList = $("[id*=DepositAccountDropDownList]");
        depositRadioList.empty().append('<option selected="selected" value="0">Please select</option>');
        for (var i = 0; i < r.d.length; i++) {
            depositRadioList.append('<option>' + r.d[i].AccountNumber + '</option>');
        }

返回的对象数组

如果每个选项的结果是整个AccountNumber对象数组,则您需要遍历r对象,直到到达帐号对象列表。

看一下我的Example JS Fiddle。可能有一种更简洁的方法可以做到这一点,但为了介绍原理,我已经设置了嵌套循环,以便您进入<select></select>所需的对象值列表。

我使用的是JQuery $ .each()方法,但您可以使用for循环。我建议只使用一个或另一个来保持一致性。如果数据集非常大,for循环具有更好的性能。