3

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

4

5 回答 5

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 })

我还建议避免使用$.getor$.post因为它们抽象出在访问 Web 服务时可能有用的设置。如果您想简写它,我建议您将$.ajax调用包装在您自己的函数中。您还需要考虑标准化您的 Web 服务响应。您的 Web 服务是一种协议,因此它受益于定义良好的标头。有关更深入的解释,请查看此处:基于 MVC 服务的 Web 应用程序简介

于 2013-10-08T18:29:12.283 回答
0

试试这个 :

alert(data[0].Name)
于 2013-10-08T18:25:34.577 回答
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.

于 2013-10-08T18:31:25.417 回答
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);
    });
于 2013-10-17T08:19:51.957 回答
-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);
        });
于 2013-10-08T18:26:07.397 回答