gpt4 book ai didi

c# - 无法解析 JQuery ajax 调用返回的 JSON

转载 作者:太空宇宙 更新时间:2023-11-03 13:34:10 25 4
gpt4 key购买 nike

我正在使用下面给出的 JQuery ajax 调用一个方法

$.post('../User/GetCountry',
{
zone: 1
},
function (data) {
alert(data);
alert(data["Countries"]);
}, "json").fail(function (jqXHR, textStatus, errorThrown) {
//alert(textStatus);
});

C#代码

public static string GetCountry()
{
var result = new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(Countries.GetAll());
return result;
}

现在,当我在服务器端调试我的代码时,我看到下面的结果,根据我的说法,这是完美的 json

[{"Id":4,"Name":"France"},{"Id":3,"Name":"Germany"}]

但是在 javascript 中我得到的是 json

[[object Object],[object Object]]

任何人都可以让我知道我在这里缺少什么

解决使用var jsonData = JSON.stringify(数据);var jsonParse = JSON.parse(jsonData);

最佳答案

您的代码存在一些问题。首先,尽管您将参数 zone 传递给 Web 服务方法,但该方法本身不会接收此参数。其次,如果要返回 JSON,请不要使用返回类型字符串。使用 JSONResult。这也将允许您删除 static 关键字。我建议像这样更改您的方法:

public JSONResult GetCountry(int? zone)
{
// ...
}

您应该进行两项最终更改。第一种是使用 ASP.Net MVC 内置的 Json() 方法来处理对象的序列化。第二个是你应该始终投影你的数据层结果,即使它们恰好已经在你想要使用的结构中。这样,如果您以破坏服务的方式更改数据层对象,您将收到编译错误而不是运行时异常。

return Json(from c in Countries.GetAll() select new { Id = c.Id, Name = c.Name })

我还建议避免使用 $.get$.post,因为它们抽象出在访问 Web 服务时非常有用的设置。如果您想速​​记它,我建议将 $.ajax 调用包装在您自己的函数中。您还需要考虑标准化您的 Web 服务响应。您的 Web 服务是某种协议(protocol),因此它受益于定义明确的 header 。如需更深入的解释,请查看此处:Introduction to MVC Service Based Web Applications

关于c# - 无法解析 JQuery ajax 调用返回的 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19255353/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com