将数据从ajax发送到c#server

将数据从ajax发送到c#server,c#,asp.net,ajax,asp.net-ajax,C#,Asp.net,Ajax,Asp.net Ajax,我已经在客户端创建了一本字典,想在服务器端发送它。在我的脚本中,字典是正确创建的,但我不确定我的ajax代码是否正确 $("#btnSubmit").click(function () { var sendList = new Array(); var elems = $(".elemValue"); $.each(elems, function (key, value) { if (value.attributes.ele

我已经在客户端创建了一本字典,想在服务器端发送它。在我的脚本中,字典是正确创建的,但我不确定我的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;
    }
[System.Web.Services.WebMethod]
公共静态字符串GetData(Dictionary dict)
{
Dictionary serverDict=新字典();
serverDict=dict;
字符串结果=”;
foreach(dict中的var值)
{
结果+=”键为:“+value.key+”值为:“+value.value;
}
返回结果;
}
我的错误在哪里?我怎样才能纠正它们?帮助,请=)

这里有几件事:

  • 您需要明确允许GET动词:

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

    dataType: "json"
    
    无法让jQuery正确解析响应。您应该删除这一行,或者以JSON格式构建响应


  • 我认为不可能从JSON创建字典。至少不需要很多工作。我会尝试将它从
    字典
    更改为
    列表
    ,看看它是否为您反序列化

    参考

    一旦你这样做了,如果你仍然需要字典,你可以相当容易地转换它

    var Dictionary = new Dictionary<string,string>();
    foreach(var KVP in List) Dictionary.Add(KVP.Key, KVP.Value);
    
    var Dictionary=newdictionary();
    foreach(列表中的var KVP)Dictionary.Add(KVP.Key,KVP.Value);
    
    您是否收到任何错误?没有,任何错误。只是脚本根本不起作用。甚至VS debugger也没有被调用。所以脚本没有发出AJAX请求?@Spencer Ruport,不,它没有。我更改了如下脚本:'$.AJAX({type:“GET”,url:“dataloader.aspx/GetData”,data:data,contentType:“application/json;charset=utf-8”,success:alert(“it's alive!!”) });' 它工作正常:成功事件被执行,但服务器端并没有。问题在于ajax脚本,因为它失败了。感谢您的回答,但首先我需要让这段代码正常工作。=)