返回List<字符串>Jquery中的from JSON调用具有未定义的长度

returning List<string> from JSON call in Jquery has undefined length

本文关键字:调用 未定义 JSON 中的 lt List 字符串 gt 返回 Jquery from      更新时间:2023-09-26

我正在从jquery调用一个Web服务,并试图返回一个List(我还尝试了一个字符串[])。当我得到结果时,我可以看到它包含了一个包含我需要的值的数组,但我不能在Javascript中迭代它们,因为没有长度值。

我的C#Web服务如下:

    [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中没有长度的数组?

我认为您应该首先使用JSONSerializer向客户端发送正确的json结构。

您应该只返回一个具有JSON格式的字符串,然后它就可以工作了!

首先,使用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

我无法解释它为什么有效,但我需要做的是获取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来自哪里?)

您可以像这样使用.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>');                
        }       
}