2

jquery から Web サービスを呼び出し、List を返そうとしています (string[] も試しました)。結果が返されると、必要な値を持つ配列が保持されていることがわかりますが、長さの値がないため、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

まず、Google コンソールを使用します。最高で役に立ちます。

受け取ったものを確認するには、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);
         }
    });

そしてもう1つ

function GetKeysSuccessCall(response) {
    /* TO DO */
    var i = 0;
    for (i =0; i < response.length; i++) {
        $("#popupList").append('<li>' + response[i] + '</li>');                
        }       
}

の代わりに応答する必要があります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 に答える