我正在尝试填充从我的网络服务返回为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解析的东西的问题。但是无法抓住这个。我不是没有尝试过,我是新手,所以之前将此标记为重复,请一次查看代码。谢谢。
答案 0 :(得分:1)
我无法感觉到,因为你的GetActiveDepositAccountsForLoanAlert
正在返回一个字符串而不是一个对象,所以r.d被视为一个字符串。尝试两件事之一。之一:
var data = JSON.parse(r.d)
并在for循环中使用该变量。答案 1 :(得分:0)
如果通过&#34; 整个json &#34;,您的意思是每个选项获得一个{"AccountNumber":"6MR-0000002"}
- 尝试输出目标AccountNumber对象的值(例如r.d[i].AccountNumber
或r.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
循环具有更好的性能。