Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery $.ajax get,mvc 3 jsonresult-未定义的结果_Jquery_Asp.net_Ajax_Json_Asp.net Mvc 3 - Fatal编程技术网

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

Jquery $.ajax get,mvc 3 jsonresult-未定义的结果,jquery,asp.net,ajax,json,asp.net-mvc-3,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();

我有一个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格式的字符串,假设选择的国家是肯尼亚,输出字符串如下所示:

    [{ RegionID: 1, RegionName: Nairobi Region},{ RegionID: 3, RegionName: Coast Region}]
    $(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);
        }
    });
});
    });
我有一个javascript,它将国家的id传递给控制器以获取地区,我最终希望使用它填充一个新的dropdownlist。我的javascript如下所示:

    [{ RegionID: 1, RegionName: Nairobi Region},{ RegionID: 3, RegionName: Coast Region}]
    $(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);
        }
    });
});
    });
但是突然出现的警报说:

未定义未定义


使用result.d和函数获取实际数据。萤火虫怎么说


您可能也需要阅读。

我强烈建议使用JSON序列化程序来构建JSON字符串,例如,或。这将使创建JSON的过程不那么容易出错,并节省手动滚动的工作量:)

看起来您正在构建的JSON不是有效的JSON:每个键都应该是双引号,每个字符串值也应该是双引号

此外,传递给
$的函数。每个
都有两个参数,索引和值,因此
$。
success
函数中的每个
调用都应该

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

也许你可以用这样的东西

jQuery.getJSON(url, null, function (countryString) {
        //countryString es the data returned from de action method.
    });
error: function(XMLHttpRequest, textStatus, errorThrown){
alert(errorThrown);
}

将错误修改为如下所示

jQuery.getJSON(url, null, function (countryString) {
        //countryString es the data returned from de action method.
    });
error: function(XMLHttpRequest, textStatus, errorThrown){
alert(errorThrown);
}
并使用IISExpress-in VS build-in web服务器来生成这些未生成的属性


祝您好运

请提供有关服务器响应的更多信息,当您尝试将对象转换为字符串时,可能会显示undefined undefined。我只注意到altert消息中的undefined,这不是我不相信的服务器响应。您能详细说明客户端的内容吗?我认为他并没有使用data.d提取数据部分。希望您对此发表评论:)@Rohan-在MVC中,响应不会像在ASP.NET web服务和页面方法中那样包装在
d
对象中。由于OP使用的是jQuery,并且数据类型设置为
json
,jQuery将把响应(在检查它是否是“安全的”json之后)解析为一个JavaScript数据结构,然后就可以使用它了。我真的不想使用其他人的序列化程序,因为这样我就永远不会确切地了解如何创建自己的json字符串。但这似乎将是我必须走的道路。@Robinritis:这很好,但是为什么要重新发明轮子呢?:)如果您使用JavaScriptSerializer,我想再补充一点,那就是您必须设置maxJsonLength属性:@Robin-在这里同意Rohan的观点,在我看来,花费精力重新创建whell是不值得的。重要的一点是,您了解json的结构:)我最终只是将控制器的输出更改为使用.ToList(),而mvc似乎已经为我序列化了它。谢谢大家的回复。