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

时间:2013-10-08 18:20:30

标签: c# jquery asp.net ajax json

我正在使用下面给出的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);

5 个答案:

答案 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);
        });