2

我正在从 jquery 调用 web 服务并尝试返回一个列表(我也尝试了一个字符串 [])。当我得到结果时,我可以看到它包含一个包含我需要的值的数组,但我无法在 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 中处理没有长度的数组?

4

4 回答 4

2

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

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

于 2012-08-21T07:05:55.563 回答
1

首先,使用谷歌控制台。最好的和有帮助的。

要查看您收到的内容,请使用console.log(response);(而不是 alert 并且不要在 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

于 2012-08-21T06:57:06.160 回答
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 的来源?)

于 2012-08-21T22:21:56.273 回答
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>');                
        }       
}
于 2012-08-21T06:55:43.403 回答