$ .ajax get,mvc 3 jsonresult - 未定义的结果

时间:2011-11-15 09:22:06

标签: jquery asp.net ajax json asp.net-mvc-3

我有一个MVC 3 jsonresult控制器,它返回一个JSON字符串,其中包含与特定国家/地区相关的区域,代码如下:

    public JsonResult getRegions(int countryID)
    {
        var regions = from r in db.Regions where r.CountryID == countryID select r;

        var builder = new StringBuilder();
        builder.Append("[");
        foreach (Region region in regions)
            //builder.AppendFormat("{0}, \"{1}\"", "RegionID: " + region.RegionID, "RegionName: " + region.RegionName);                
            builder.Append("{ RegionID: " + region.RegionID + ", RegionName: " + region.RegionName + "},"); 
        //var result = builder.ToString().TrimEnd(new char[] { ',', ' ' }) + "]";            
        builder = builder.Append("]");

        var result = builder.Replace(",]", "]");

        return Json(result.ToString(), JsonRequestBehavior.AllowGet);
    }

这将返回一个JSON格式的字符串,让我们假设Country Selected是肯尼亚,输出字符串如下所示:

    [{ RegionID: 1, RegionName: Nairobi Region},{ RegionID: 3, RegionName: Coast Region}]

我有一个javascript,它将国家/地区的ID传递给控制器​​以获取区域,我最终希望用它来填充新的下拉列表。我的javascript看起来如下:

    $(document).ready(function () {
$("#CountryID").change(function () {
    $.ajax({
        type: "GET",
        url: "/ajaxcalls/getregions",
        data: "countryID=" + $("#CountryID :selected").val(),
        datatype: "json",
        success: function (result) {
            var options = ("#regions");
            $.each(result, function (item) {
                alert(item.RegionID + " " + item.RegionName);
            });
        },
        error: function (req, status, error) {
            alert(error + " " + req);
        }
    });
});
    });

但弹出的警告说:

  

undefined undefined。

4 个答案:

答案 0 :(得分:3)

我强烈建议使用JSON序列化程序来构建JSON字符串,例如JavaScriptSerializerJson.NET's SerializerDataContractJsonSerializer。这将使创建JSON的过程不容易出错,并节省您手动滚动的工作:)

看起来你正在构建的JSON是无效的JSON:每个键都应该是双引号,每个字符串值也应如此。

此外,传递给$.each的函数有两个参数,索引和值,因此$.each函数内的success调用应为

$.each(result, function (index, item) {
    alert(item.RegionID + " " + item.RegionName);
});

答案 1 :(得分:0)

使用result.d并获取实际数据。萤火虫说什么?

您可能也想阅读this

答案 2 :(得分:0)

也许你可以使用这样的东西

jQuery.getJSON(url, null, function (countryString) {
        //countryString es the data returned from de action method.
    });

答案 3 :(得分:0)

修改您的错误,使其看起来像这样

error: function(XMLHttpRequest, textStatus, errorThrown){
alert(errorThrown);
}

并使用IISExpress - 在Web服务器的VS build中,这些属性未生成。

祝你好运