我正在调用来自jquery的web服务并尝试返回一个List(我也尝试过一个字符串[])。当我得到结果时,我可以看到它包含一个包含我需要的值的数组,但我无法在Javascript中迭代它们,因为没有长度值。
我的C#Webservice如下:
[WebMethod]
public string[] GetMultiChoiceOptions(int keyId)
{
string connectionString = System.Web.Configuration.WebConfigurationManager.ConnectionStrings["OBConnectionString"].ConnectionString;
SitesUtil db = new SitesUtil(connectionString);
List<MultiChoiceOption> keys = db.GetMultiChoiceOptions(keyId, 1); //TO DO CHANGE THIS TO REAL USERID
return keys.Select(a => a.OptionValue).ToArray();
}
和我的Jquery / javscript调用如下:
function GetKeys(keyid) {
var pageUrl = '<%=ResolveUrl("~/WebService/UpdateDatabase.asmx")%>'
$.ajax({
type: "POST",
url: pageUrl + "/GetMultiChoiceOptions",
data: '{keyId:' + keyid + '}',
contentType: "application/json; charset=utf-8",
dataType: "json",
success: GetKeysSuccessCall,
error: OnErrorCall
});
}
function GetKeysSuccessCall(response) {
/* TO DO */
var i = 0;
for (i =0; i < response.length; i++) {
$("#popupList").append('<li>' + response[i] + '</li>');
}
}
我不确定如何处理没有javascript长度的数组?
答案 0 :(得分:2)
我认为您应首先使用 JSONSerializer 将rigth json结构发送到客户端。
您应该只返回一个具有JSON格式的字符串,然后它才能工作!
答案 1 :(得分:1)
首先,使用Google控制台。最好的,乐于助人。
要查看收到的内容,请使用console.log(response);
(而不是警告,不要在IE中使用,因为它不知道控制台)
首先尝试
$.ajax({
type: "POST",
url: pageUrl + "/GetMultiChoiceOptions",
data: '{keyId:' + keyid + '}',
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(response){
GetKeysSuccessCall(response);
},
error: function(msg) {
OnErrorCall(msg);
}
});
一个:
function GetKeysSuccessCall(response) {
/* TO DO */
var i = 0;
for (i =0; i < response.length; i++) {
$("#popupList").append('<li>' + response[i] + '</li>');
}
}
repsonse必须代替item
答案 2 :(得分:1)
我无法解释它为什么会起作用,但我需要做的是获取response.d值....
所以这就是最终的解决方案:
function GetKeysSuccessCall(response) {
/* TO DO */
var result = response.d;
var i;
for (i = 0; i < result.length; i++)
{
$("#popupList").append('<li>' + result[i] + '</li>');
}
}
(如果有人可以解释.d来自哪里?)
答案 3 :(得分:0)
您可以像这样使用.each函数
success: function (response) {
var options= response.d;
$.each(options, function (index, option) {
$("#popupList").append('<li>' + response[option] + '</li>');
});
},
或
function GetKeysSuccessCall(response) {
/* TO DO */
var i = 0;
for (i =0; i < response.d.length; i++) {
$("#popupList").append('<li>' + response.d[i] + '</li>');
}
}