我在cliend方面创建了一个字典,并希望在服务器端发送它。在我的脚本中,字典是正确创建的,但我不确定是否会删除我的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;
}
我的错误在哪里,我该如何解决?请帮助,=)
答案 0 :(得分:1)
我认为不可能从JSON创建一个Dictionary。至少没有很多工作。我会尝试将其从Dictionary
更改为List<KeyValuePair<string,string>>
,看看它是否会反序列化。
如果你仍然需要字典,那么一旦你完成了它,你可以很容易地转换它。
var Dictionary = new Dictionary<string,string>();
foreach(var KVP in List) Dictionary.Add(KVP.Key, KVP.Value);
答案 1 :(得分:0)
这里有几件事:
您需要明确允许GET动词:
[System.Web.Services.WebMethod]
[System.Web.Script.Services.ScriptMethod(UseHttpGet=true)]
您正在从服务器返回纯文本,这意味着这一行:
dataType: "json"
不会让jQuery正确解析响应。您应该删除此行,或以JSON格式构建响应。