0

我在客户端创建了一个字典,并希望在服务器端发送它。在我的脚本中,字典是正确创建的,但我不确定我的 ajax 代码是否存在。

$("#btnSubmit").click(function () {
        var sendList = new Array();
        var elems = $(".elemValue");
        $.each(elems, function (key, value) {
            if (value.attributes.elemName.nodeValue != "PhotoImg") {
                sendList[value.attributes.elemName.nodeValue] = value.attributes.value.nodeValue;
            }
        });

        var data = JSON.stringify({dict : sendList});

        $.ajax({
            type: "GET",
            url: "dataloader.aspx/GetData",
            data: data,
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (result){
                alert(result.d);
            }
        });
        });

在服务器端我写

[System.Web.Services.WebMethod]
    public static string GetData(Dictionary<string,string> dict)
    {
        Dictionary<string, string> serverDict = new Dictionary<string, string>();
        serverDict = dict;
        string result = "";
        foreach (var value in dict)
        {
            result += "The key is:" + value.Key + "The value is:" + value.Value;
        }

        return result;
    }

我的错误在哪里,我该如何解决?请帮忙=)

4

2 回答 2

1

我认为不可能从 JSON 创建字典。至少不是没有大量的工作。我会尝试将其从 a 更改Dictionary为 aList<KeyValuePair<string,string>>并查看它是否为您反序列化。

KeyValuePair参考

完成此操作后,如果您仍然需要 Dictionary,则可以相当轻松地对其进行转换。

var Dictionary = new Dictionary<string,string>();
foreach(var KVP in List) Dictionary.Add(KVP.Key, KVP.Value);
于 2013-07-30T08:24:06.957 回答
0

这里有几件事:

  1. 您需要明确允许 GET 动词:

    [System.Web.Services.WebMethod]
    [System.Web.Script.Services.ScriptMethod(UseHttpGet=true)]
    
  2. 您正在从服务器返回纯文本,这意味着这一行:

    dataType: "json"
    

    不会让 jQuery 正确解析响应。您应该删除此行,或以 JSON 格式构建响应。

于 2013-07-30T08:24:05.050 回答