从Jquery中的JSON调用返回List <string>具有未定义的长度</string>

时间:2012-08-21 06:50:42

标签: c# javascript jquery asp.net

我正在调用来自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长度的数组?

4 个答案:

答案 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>');                
        }       
}