jquery – WebMethod返回JSON但我的$.ajax()回调中的响应obj只是一个字符串

前端之家收集整理的这篇文章主要介绍了jquery – WebMethod返回JSON但我的$.ajax()回调中的响应obj只是一个字符串前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
这是我自制的序列化类:
public class JsonBuilder
{
    private StringBuilder json;

    public JsonBuilder()
    {
        json = new StringBuilder();
    }

    public JsonBuilder AddObjectType(string className)
    {
        json.Append("\"" + className + "\": {");
        return this;
    }

    public JsonBuilder Add(string key,string val)
    {
        json.AppendFormat("\"{0}\":\"{1}\",",key,val);
        return this;
    }

    public JsonBuilder Add(string key,int val)
    {
        json.AppendFormat("\"{0}\":{1},val);
        return this;
    }

    public string Serialize()
    {
        return json.ToString().TrimEnd(new char[] { ',' }) + "}";
    }
}

这是Web方法

[WebMethod]
public static string GetPersonInfo(string pFirstName,string pLastName)
{
    var json = new JsonBuilder().AddObjectType("Person");
    json.Add("FirstName","Psuedo" + pFirstName).Add("LastName","Tally-" + pLastName);
    json.Add("Address","5035 Macleay Rd SE").Add("City","Salem");
    json.Add("State","Oregon").Add("ZipCode","97317").Add("Age",99);
    return json.Serialize();
}

Ajax调用客户端

$.ajax(
   {
       type: "POST",url: "Default.aspx/GetPersonInfo",data: JSON.stringify(name),contentType: "application/json; charset=uft-8",dataType: "json",success: function (rsp) { SetPerson(rsp); },error: function (rsp)
       {
           alert(rsp);
       }
   });

最后,我的回调方法

function SetPerson(rsp)
{
    $('#fName').val(rsp.d.FirstName);
    $('#lName').val(rsp.d.LastName);
    $('#address').val(rsp.d.Address);
    $('#city').val(rsp.d.City);
    $('#state').val(rsp.d.State);
    $('#zip').val(rsp.d.ZipCode);
    SetPerson(rsp.d.Age);
}

rsp.d是一个包含所有属性的字符串……属性本身是未定义的.我知道我在这里缺少一些简单的东西.

从服务器返回的字符串

"Person": {"FirstName":"Psuedomatt","LastName":"Tally-cox","Address":"5035 Macleay Rd SE","City":"Salem","State":"Oregon","ZipCode":"97317","Age":99}

解决方法

您不应手动序列化返回值; ASP.NET将为您完成.尝试这样的事情:
[WebMethod]
public static Person GetPersonInfo(string pFirstName,string pLastName)
{
  // Assuming you have a server-side Person class.
  Person p = new Person();

  p.FirstName = "Pseudo" + pFirstName;
  p.LastName = "Tally-" + pLastName;
  p.Address = "5035 Macleay Rd SE";
  p.City = "Salem";
  p.State = "Oregon";
  p.ZipCode = "97317";

  // ASP.NET will automatically JSON serialize this,if you call it with
  //  the correct client-side form (which you appear to be doing).
  return p;
}

如果你需要返回更动态的东西,就像你的例子似乎正在做的那样,你可以使用匿名类型:

[WebMethod]
public static object GetPersonInfo(string pFirstName,string pLastName)
{
  // ASP.NET will automatically JSON serialize this as well.
  return new {
    FirstName = "Pseudo" + pFirstName,LastName = "Tally-" + pLastName,Address = "5035 Macleay Rd SE",City = "Salem",State = "Oregon",ZipCode = "97317"
  }
}

猜你在找的jQuery相关文章