继续我原来的问题:Not receiving JSONP callback
我现在正在尝试处理JSONP回调中的信息,我似乎无法获取任何数据来“加载”,即rsp
对象似乎为空/空。
VenuOffersDAO(更新:不使用它来简化事情)
这是在MVC4项目之外的单独的类库项目中。因此,我的controller
不使用model
。
public static List<Offer> GetVenuesOffers(int venueId)
{
using (var ctx = new MyDbEntities())
{
var venue = (...removed for brevity...).FirstOrDefault();
return
venue != null
? GetVenuesOffers(venue)
: null;
}
}
public static List<Offer> GetVenuesOffers(Venue venue)
{
using (var ctx = new MyDbEntities())
{
...removed for brevity...
return offers.ToList();
}
}
控制器(更新:现在使用更简单的对象而不是生成的EF对象。)
这是在ASP.NET MVC4项目中。
public class VenueOffersController : Controller
{
[JsonpFilter]
public JsonResult GetOffersForVenue(int venueId)
{
var offers = new List<VenueOffers>();
using (var ctx = new BoonEntities())
{
offers = (from o in ctx.Offers
where o.VenueID == venueId
select new VenueOffers
{
Id = o.ID,
VenueId = venueId,
Title = o.Title
}).ToList();
}
return Json(offers.ToList(), JsonRequestBehavior.AllowGet);
}
}
[Serializable]
public class VenueOffers
{
public int Id { get; set; }
public int VenueId { get; set; }
public string Title { get; set; }
}
HTML页面
这是一个ASP.NET v4 Web表单项目,作为纯HTML文件。
<head>
<title></title>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
</head>
<body>
<script type="text/javascript">
var url = "http://localhost/MySite.ContentDelivery/VenueOffers/GetOffersForVenue/?";
function getOffers() {
// build the URL
debugger;
var call = url + "venueId=48&callback=?";
// make the ajax call
$.getJSON(call, function (rsp) {
alert(rsp.offers); // 'undefined'
alert(rsp); // empty
var html = "";
$.each(rsp.offers.offer, function () {
var offer = this;
html += "<span" + offer.Title + "</span> <br />";
});
$("#offersDiv").append(html);
});
}
// get the offers
$(document).ready(function () {
alert('go..');
$(getOffers);
});
</script>
<div id="offersDiv"></div>
</body>
答案 0 :(得分:2)
您的控制器操作正在返回一个数组(List<Offer>
)。您的JSON结果可能如下所示:
[{"Name":"some name 1"}, {"Name":"some name 2"}, ...]
因此,在成功回调中,您可以遍历结果:
$.getJSON(call, function (rsp) {
var html = "";
$.each(rsp, function () {
var offer = this;
html += "<span>" + offer.Name + "</span><br />";
});
$("#offersDiv").append(html);
});
还在控制器操作中放置一个断点,并确保您返回的offers
变量实际上包含一些元素。
另请注意,您动态生成的>
元素缺少结束span
。
我可以在您的代码中看到的另一个问题是您可以将document.ready处理程序替换为:
$(getOffers);