C# 无法分析JQuery ajax调用返回的JSON
我使用下面给出的jQueryAjax调用一个方法C# 无法分析JQuery ajax调用返回的JSON,c#,jquery,asp.net,ajax,json,C#,Jquery,Asp.net,Ajax,Json,我使用下面给出的jQueryAjax调用一个方法 $.post('../User/GetCountry', { zone: 1 }, function (data) { alert(data); alert(data["Countries"]); }, "json").fail(function (jqXHR, textStatus, errorThrown)
$.post('../User/GetCountry',
{
zone: 1
},
function (data) {
alert(data);
alert(data["Countries"]);
}, "json").fail(function (jqXHR, textStatus, errorThrown) {
//alert(textStatus);
});
C#代码
现在,当我在服务器端调试代码时,我看到下面的结果,我认为这是完美的json
[{"Id":4,"Name":"France"},{"Id":3,"Name":"Germany"}]
但是在javascript中,我得到的json是
[[object Object],[object Object]]
有人能告诉我我在这里错过了什么吗
使用
var jsonData=JSON.stringify(数据);
var jsonParse=JSON.parse(jsonData)试试这个:
alert(data[0].Name)
尝试使用JSON.parse():
您的代码有一些问题。首先,尽管您正在向web服务方法传递一个参数
zone
,但该方法本身并不接收此参数。其次,如果要返回JSON,请不要使用返回类型字符串。使用JSONResult
。这也将允许您删除static关键字。我建议更改您的方法,如下所示:
public JSONResult GetCountry(int? zone)
{
// ...
}
最后,您应该做两个更改。第一种方法是使用ASP.NETMVC内置的Json()
方法来处理对象的序列化。第二,您应该始终投影数据层结果,即使它们恰好已经在您想要使用的结构中。这样,如果您以中断服务的方式更改数据层对象,您将得到一个编译错误,而不是运行时异常
return Json(from c in Countries.GetAll() select new { Id = c.Id, Name = c.Name })
我还建议避免使用$.get
或$.post
,因为它们会抽象出访问web服务时可能有用的设置。如果您想简化它,我建议在您自己的函数中包装$.ajax
调用。您还需要考虑将web服务响应标准化。您的web服务是一种协议,因此它受益于定义良好的头。有关更深入的解释,请参见此处:
对我有好处。您需要确保发送的内容类型为“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);
});
它只是告诉您这是一个对象数组:),它是真正的使用
console.log(data)
。alert()将尝试为您字符串化,这意味着objecst将只是对象对象
。您将获得一个对象数组。尝试使用反序列化数组。这样就容易多了@icemanind它已经反序列化了,因此他看到的是[object object]。@RajKumar有趣,这是我刚刚发布的:)我使用的是asp.net而不是MVC
return Json(from c in Countries.GetAll() select new { Id = c.Id, Name = c.Name })
$.ajax({
type: 'POST',
url: '../User/GetCountry',
data: {
zone: 1
},
success: function(data) { alert('data: ' + data); },
contentType: "application/json",
dataType: 'json'
});
$.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);
});