0

我正在尝试使用 Ajax 从客户端 JQuery 将 JSON 格式发送到 ASP.net(后面的 C# 代码)并保存数据。但是我无法这样做。我对如何在服务器端处理客户端请求知之甚少。

提前致谢!

我的代码如下:

客户端:

$.ajax(
        {
            type: "POST",
            url: "Default.aspx/save",
            data: "{'data': " + JSON.stringify(prj) + "}",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (response) {
            if (response.ok) {
                prof.stop();
                if (response.data) {
                    ge.loadProject(response.data); 
                } else {
                    ge.reset();
                }
            } else {
                var errMsg = "Errors saving project\n\n";
                if (response.message) {
                    errMsg = errMsg + response.message + "\n";
                }

                if (response.errorMessages.length) {
                    errMsg += response.errorMessages.join("\n");
                }

                alert(errMsg);
            }
        }

    });

我不太熟悉在代码隐藏中处理 JSON,所以我尝试了一些方法,并且我在 C# 中得到了错误代码:

    [WebMethod]
    public static string save (object data)
    {

    //String s1 = data.ToString();
    //Dictionary<string, object> tmp = (Dictionary<string, object>)data;

    //DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(string));
    //MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(data));
    //string obj = (string)ser.ReadObject(ms);

    string s2 = data.ToString();
    GC.GClass g = new GC.GClass();
    g.Save(s2);
    return s2;
}

将数据保存为文件的 GC.GClass 代码:

namespace GC
 {
public class GClass
{
    string fileLoc = @"c:\Users\Pouria\Desktop\sample1.txt";



    public GClass()
    {

    }

    public void Save(string data)
    {
        FileStream fs = null;

        if (!File.Exists(fileLoc))
        {
            using (fs = File.Create(fileLoc))
            {
            }


            if (File.Exists(fileLoc))
            {
                using (StreamWriter sw = new StreamWriter(fileLoc))
                {
                    sw.Write(data);
                }
            }

        }
    }

}
}

在我的响应文件和我的 sample1.txt 中,我将其作为输出:

 System.Collections.Generic.Dictionary`2[System.String,System.Object]

我无法上传 FireBug 的图像,但这些是响应选项卡消息:

 {"d":"System.Collections.Generic.Dictionary`2[System.String,System.Object]"}

和 JSON 选项卡:

 "System.Collections.Generic.Dictionary`2[System.String,System.Object]"
4

1 回答 1

0

首先,您必须在项目中创建一个WebService1.asmx文件。创建文件后,在WebService1.asmx文件中创建一个方法。

[WebMethod]
public static string save (object data)
{

//String s1 = data.ToString();
//Dictionary<string, object> tmp = (Dictionary<string, object>)data;

//DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(string));
//MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(data));
//string obj = (string)ser.ReadObject(ms);

string s2 = data.ToString();
GC.GClass g = new GC.GClass();
g.Save(s2);
return s2;
}

脚本

$.ajax(
    {
        type: "POST",
        url: "WebService1.asmx/save",
        data: "{'data': " + JSON.stringify(prj) + "}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (response) {
        if (response.ok) {
            prof.stop();
            if (response.data) {
                ge.loadProject(response.data); 
            } else {
                ge.reset();
            }
        } else {
            var errMsg = "Errors saving project\n\n";
            if (response.message) {
                errMsg = errMsg + response.message + "\n";
            }

            if (response.errorMessages.length) {
                errMsg += response.errorMessages.join("\n");
            }

            alert(errMsg);
        }
    }

});

在Save方法上设置断点并运行它。我认为通过使用它可以解决您的问题。

于 2013-07-25T04:53:51.390 回答