我有一个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。
答案 0 :(得分:3)
我强烈建议使用JSON序列化程序来构建JSON字符串,例如JavaScriptSerializer
,Json.NET's Serializer
或DataContractJsonSerializer
。这将使创建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中,这些属性未生成。
祝你好运