的WebMethod返回JSON,但OBJ在我的$就响应()回调仅仅是一个字符串 [英] WebMethod returning JSON but the response obj in my $.ajax() callback is only a string

查看:118
本文介绍了的WebMethod返回JSON,但OBJ在我的$就响应()回调仅仅是一个字符串的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

下面是我自制的序列化类:

 公共类JsonBuilder
{
    私人StringBuilder的JSON;

    公共JsonBuilder()
    {
        JSON =新的StringBuilder();
    }

    公共JsonBuilder AddObjectType(字符串的className)
    {
        json.Append(\+的className +\:{);
        回到这一点;
    }

    公共JsonBuilder添加(字符串键,字符串VAL)
    {
        json.AppendFormat(\{0} \:\{1} \,键,VAL);
        回到这一点;
    }

    公共JsonBuilder添加(字符串键,诠释VAL)
    {
        json.AppendFormat(\{0} \:{1},键,val)的;
        回到这一点;
    }

    公共字符串序列化()
    {
        返回json.ToString()TrimEnd(新的char [] {','})+}。
    }
}
 

下面是Web方法

  [WebMethod的]
公共静态字符串GetPersonInfo(字符串pFirstName,串pLastName)
{
    VAR JSON =新JsonBuilder()AddObjectType(人)。
    json.Add(名字,的伪+ pFirstName)。新增(姓氏,Tally-+ pLastName);
    。json.Add(地址,5035麦克雷路SE)添加(城市,萨利姆);
    。json.Add(国家,俄勒冈州)添加(ZIP code,97317)添加(时代,99);
    返回json.Serialize();
}
 

Ajax调用客户端

  $。阿贾克斯(
   {
       键入:POST,
       网址:Default.aspx的/ GetPersonInfo
       数据:JSON.stringify(名称),
       的contentType:应用/ JSON的;字符集= UFT-8,
       数据类型:JSON,
       成功:函数(RSP){SetPerson(RSP); },
       错误:函数(RSP)
       {
           警报(RSP);
       }
   });
 

最后,我的回调方法

 函数SetPerson(RSP)
{
    $('#FNAME)VAL(rsp.d.FirstName)。
    $('#L-NAME)VAL(rsp.d.LastName)。
    $('#地址)VAL(rsp.d.Address)。
    $('#城市)VAL(rsp.d.City)。
    $('#国家)VAL(rsp.d.State)。
    $('#拉链)VAL(rsp.d.Zip code)。
    SetPerson(rsp.d.Age);
}
 

rsp.d是包含所有属性...属性本身是不确定的字符串。我知道我失去了一些东西简单的在这里。

从服务器返回的字符串

 人:{姓:Psuedomatt,姓氏:理货 - 考克斯,地址:5035麦克雷路SE,城市: 萨利姆,国家:俄勒冈州,邮编code:97317,时代:99}
 

解决方案

您不能手动序列化的返回值; ASP.NET会为你做它。尝试是这样的:

  [WebMethod的]
公共静态人GetPersonInfo(字符串pFirstName,串pLastName)
{
  //假设你有一个服务器端的Person类。
  者P =新的Person();

  p.FirstName =伪+ pFirstName;
  p.LastName =Tally-+ pLastName;
  p.Address =5035麦克雷路SE;
  p.City =萨利姆;
  p.State =俄勒冈州;
  p.Zip code =97317;

  // ASP.NET会自动JSON序列化这一点,如果你把它
  //正确的客户端的形式(你似乎做的)。
  返回磷;
}
 

如果你需要返回的东西更有活力,喜欢你的例子似乎做的事情,你可以使用匿名类型:

  [WebMethod的]
公共静态对象GetPersonInfo(字符串pFirstName,串pLastName)
{
  // ASP.NET会自动JSON序列化这一点。
  返回新{
    名字=伪+ pFirstName,
    姓氏=Tally-+ pLastName,
    地址=5035麦克雷路SE,
    市=萨利姆
    国家=俄勒冈州,
    邮编code =97317
  }
}
 

Here is my home-made Serializing class:

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},", key, val);
        return this;
    }

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

Here is the Web Method

[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();
}

The Ajax call client-side

 $.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);
       }
   });

And finally, my callback method

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 is a string that contains all the properties ... the properties themselves are undefined. I know I am missing something simple here.

Returned string from server

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

解决方案

You shouldn't manually serialize the return value; ASP.NET will do it for you. Try something like this:

[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;
}

If you need to return something more dynamic, like your example seems to be doing, you can use an anonymous type:

[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"
  }
}

这篇关于的WebMethod返回JSON,但OBJ在我的$就响应()回调仅仅是一个字符串的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆