[英]Unable to parse JSON returned by JQuery ajax call
我正在使用下面给出的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(data); 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服务是一种协议,因此,它具有定义明确的标头,因此会受益。 有关更深入的解释,请看这里: 基于MVC服务的Web应用程序简介
尝试这个 :
alert(data[0].Name)
$.ajax({
type: 'POST',
url: '../User/GetCountry',
data: {
zone: 1
},
success: function(data) { alert('data: ' + data); },
contentType: "application/json",
dataType: 'json'
});
对我有用。 您需要确保发送的内容类型为“ application / json”,最好使用Controller
的Json()
helper方法。
搜索更多后解决了这个问题
$.post('../User/GetCountry',
{
zone: 1
},
function (data) {
var jsonData = JSON.stringify(data);
var jsonParse = JSON.parse(jsonData);
}, "json").fail(function (jqXHR, textStatus, errorThrown) {
alert(textStatus);
});
尝试使用JSON.parse():
$.post('../User/GetCountry',
{
zone: 1
},
function (data) {
data=JSON.parse(data)
alert(data["Countries"][0].Name);
}, "json").fail(function (jqXHR, textStatus, errorThrown) {
//alert(textStatus);
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.