Jquery $.ajax get,mvc 3 jsonresult-未定义的结果
我有一个MVC 3 jsonresult控制器,它返回一个JSON字符串,其中包含与特定国家/地区关联的区域,代码如下: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();
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似乎已经为我序列化了它。谢谢大家的回复。