0

我正在调用服务器端函数以返回 json 格式字符串并使用 javascript 和 ajax 在客户端进行解析。我在 javascript 中遇到了解析错误。我认为这是 JavaScriptSerializer 添加到序列化对象的反斜杠。这是我从萤火虫看到的响应: {"d":"{\"Item\":\"Testing\"}"} ,我知道反斜杠是为了逃避双引号,但我如何让 json 来解决这个问题问题??我花了 3 天时间在 google 上进行所有搜索。看来我的做法和其他人一样。感谢帮助。

服务器端代码:

[System.Web.Services.WebMethod]
public static string testmethod(string serial)
{ 
    ItemList itemlist = new ItemList();
    itemlist.Item = "Testing";     
    return new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(itemlist);
}

[System.Runtime.Serialization.DataContract]
public class ItemList
{
    [System.Runtime.Serialization.DataMember]
    public string Item { get; set; }
}

带有ajax的客户端Javascript:

function PassParemeterToAspxUsingJquery(serial)
{               
    var sn = "test";//serial;
    $.ajax({
    type: "POST",
    url: "test.aspx/testmethod",
    contentType: "application/json; charset=utf-8",
    data: "{serial:'" + sn+"'}" ,
    dataType: "json",
    success: function(msg) {           
       alert(msg.d);             
    },
    error: function(jqXHR, textStatus, errorThrown){
       alert("The following error occured: "+ textStatus, errorThrown);
       alert(jqXHR.responseText);
    }
    });
}
4

1 回答 1

1

WebMethod不会将该值作为 JSON 文本的一部分嵌入。如果您希望将其序列化为 JSON 对象而不是 JSON 字符串,则必须返回 anObject而不是 a String

[System.Web.Services.WebMethod]
public static object testmethod(string serial)
{
    ItemList itemlist = new ItemList();
    itemlist.Item = "Testing";
    return itemList;
}

不过,这可能需要 .NET 3.5 和ScriptMethodAttribute

[System.Web.Services.WebMethod]
[System.Web.Script.Services.ScriptMethod]
public static object testmethod(string serial)
{ ... }

然后只是:

success: function(msg) {
   alert(msg.d.Item);
}

或者,您应该能够通过解析按原样使用它msg.d

success: function(msg) {
    var data = $.parseJSON(msg.d);

    alert(data.Item);
}
于 2012-05-23T18:46:31.263 回答