我正在使用下面给出的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);
答案 0 :(得分:2)
您的代码存在一些问题。首先,尽管您将参数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
,因为它们会抽象出访问网络服务时有用的设置。如果你想要速记它,我建议在你自己的函数中包装$.ajax
调用。您还需要考虑标准化您的Web服务响应。您的Web服务是各种协议,因此它具有良好定义的标头。有关更深入的说明,请查看此处:Introduction to MVC Service Based Web Applications
答案 1 :(得分:0)
试试这个:
alert(data[0].Name)
答案 2 :(得分:0)
$.ajax({
type: 'POST',
url: '../User/GetCountry',
data: {
zone: 1
},
success: function(data) { alert('data: ' + data); },
contentType: "application/json",
dataType: 'json'
});
对我有用。您需要确保发送内容类型的“application / json”,最好使用Json()
中的Controller
辅助方法。
答案 3 :(得分:0)
在搜索了更多
之后解决了这个问题$.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);
});
答案 4 :(得分:-1)
尝试使用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);
});