繁体   English   中英

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

[英]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”,最好使用ControllerJson() 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM