jQuery .post 的 JSON 返回对象为空(如果不是)

Posted

技术标签:

【中文标题】jQuery .post 的 JSON 返回对象为空(如果不是)【英文标题】:JSON return object for jQuery .post is null (when it's not) 【发布时间】:2018-10-01 13:09:11 【问题描述】:

我有一个 jQuery .post 命令在我的 ASP.NET 项目中调用 Web 服务。该 Web 服务正在运行一个存储过程并将数据打包到一个对象中以返回给客户端。当我通过 Firebug 查看响应时,一切都被发回了。但是,当我尝试访问该响应对象时,它为空。为什么?

我的 jQuery:

$(".listingManagerEdit").live("click", function () 
    $.post("/WebServices/AoP.asmx/GetListingManagerByID",
        JSON.stringify(
            ListingMgrID: $(this).closest("li.listingMgrs").data("listingmgrid")
        ),
        function (data) 
            $(".billingName").val(data.Name);
            $(".billingOrgName").val(data.OrgName);
            $(".billingAddress1").val(data.Address1);
            $(".billingAddress2").val(data.Address2);
            $(".billingCity").val(data.City);
            $(".billingState option:selected").val(data.State);
            $(".billingZipCode").val(data.Zip);
            $(".billingPhone").val(data.Phone);
            $(".billingPhoneExt").val(data.PhoneExt);
            $(".billingFax").val(data.Fax);
            $(".billingFaxExt").val(data.FaxExt);
            $(".billingEMail").val(data.Email);
        
    );
);

我的网络服务:

[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public ListingManager GetListingManagerByID(int ListingMgrID)

    ListingManager LM = new ListingManager();
    DataTable dt = DataAccess.AoP.GetListingManagerByID(ListingMgrID);

    LM.Name = dt.Rows[0]["Name"].ToString();
    LM.OrgName = dt.Rows[0]["OrgName"].ToString();
    LM.Address1 = dt.Rows[0]["Address1"].ToString();
    LM.Address2 = dt.Rows[0]["Address2"].ToString();
    LM.City = dt.Rows[0]["City"].ToString();
    LM.State = dt.Rows[0]["State"].ToString();
    LM.Zip = dt.Rows[0]["Zip"].ToString();
    LM.Phone = Utilities.FormatPhoneNumber(dt.Rows[0]["Phone"].ToString());
    LM.PhoneExt = dt.Rows[0]["PhoneExt"].ToString();
    LM.Fax = Utilities.FormatPhoneNumber(dt.Rows[0]["Fax"].ToString());
    LM.FaxExt = dt.Rows[0]["FaxExt"].ToString();
    LM.Email = dt.Rows[0]["Email"].ToString();

    return LM;

响应(根据 FireBug):

d:  …
__type  BusinessLogic.AoP+ListingManager
Name:   John Smith
OrgName:    
Address1:   123 Pine Street, 3rd Floor
Address2:   
City:   San Francisco
State:  CA
Zip:    94104
Phone:  (415) 123-4567
PhoneExt:   
Fax:    
FaxExt: 
Email:  me@me.org

在我的 .post 调用的成功函数中,“data”为空。

【问题讨论】:

conosole.log 在您的回调中记录您的数据对象,看看格式是否与您期望的不太一样。 @Ryan - 它只是返回 null 如果您在 Web 浏览器的开发者控制台中查看帖子的响应,那里是否显示了数据? @Ryan - 如果我在回调中只有 console.log(data) 并查看我的浏览器控制台,它只会显示 null。如果我只是运行如上所示的代码(没有 console.log),它会显示:TypeError: data is null data.Name 将不起作用,您需要执行 data.d.Name... 但如果您的数据对象为空,则某处还有另一个问题。嗯。 【参考方案1】:

你应该传回 json,但你返回的是一个对象。

如果你可以使用 JSON.Net,

return JsonConvert.SerializeObject(LM);
// or serialize it in C#.

在回调中

function (data) 
    var o = JSON.parse(data);
    $(".billingName").val(data[0].Name);
    ...

【讨论】:

效果很好——谢谢!为了完整起见,让我补充一点,我必须将 Web 服务的返回类型从对象更改为字符串。此外,我能够访问返回数据作为“数据”(正如我最初写的那样)。我不必使用 [0] 符号。

以上是关于jQuery .post 的 JSON 返回对象为空(如果不是)的主要内容,如果未能解决你的问题,请参考以下文章

jQuery的POST请求返回JSON返回集合遍历方法

Express POST - 返回的 JSON 被 JQuery 视为无效

用jquery的post方法提交数据需要servlet返回的数据类型是json的数据格式,应该怎么做??

jquery如何返回json数据?

从 ASP.NET MVC 返回 null 时,jQuery post JSON 失败

jQuery---ajax