JSONP回调,响应数据为空 [英] JSONP Callback, response data is null
问题描述
这是我原来的问题继:没有收到JSONP回调
我现在正在尝试处理的JSONP回调的信息,我似乎无法得到任何数据装入即 RSP
对象显示为空/空。
VenuOffersDAO(UPDATE:不使用这种简化的东西)
这是一个单独的类库项目MVC4项目之外。所以,我的控制器
不使用模式
。
公共静态列表<提供> GetVenuesOffers(INT venueId)
{
使用(VAR CTX =新MyDbEntities())
{
变种场地=(...除去出于简洁...)FirstOrDefault(); 返回
会场!= NULL
? GetVenuesOffers(场地)
: 空值;
}
}公共静态列表<提供> GetVenuesOffers(地点场地)
{
使用(VAR CTX =新MyDbEntities())
{
......除去简洁...
返回offers.ToList();
}
}
控制器(更新:现在用更简单的对象,而不是生成的EF一个)
这是一个ASP.NET MVC4项目中。
公共类VenueOffersController:控制器
{
[JsonpFilter]
公共JsonResult GetOffersForVenue(INT venueId)
{
VAR报价=新的List< VenueOffers>(); 使用(VAR CTX =新BoonEntities())
{
提供=(从o在ctx.Offers
其中,o.VenueID == venueId
选择新VenueOffers
{
ID = o.ID,
VenueId = venueId,
标题= o.Title
})了ToList()。
} 返回JSON(offers.ToList(),JsonRequestBehavior.AllowGet);
}
}[Serializable接口]
公共类VenueOffers
{
公众诠释标识{搞定;组; }
公众诠释VenueId {搞定;组; }
公共字符串名称{搞定;组; }
}
HTML页
这是一个ASP.NET V4的Web窗体项目作为一个普通的HTML文件中。
< HEAD>
<标题>< /标题>
&LT;脚本的src =// ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js\"></script>
&LT; /头&GT;
&LT;身体GT;
&LT;脚本类型=文/ JavaScript的&GT;
VAR URL =HTTP://localhost/MySite.ContentDelivery/VenueOffers/GetOffersForVenue/? 功能getOffers(){
//构建URL
调试器;
VAR通话= URL +venueId = 48安培;回调=; //使Ajax调用
$ .getJSON(调用函数(RSP){
警报(rsp.offers); //未定义
警报(RSP); //空
变种的html =;
$。每个(rsp.offers.offer,函数(){
VAR报价=这一点;
HTML + =&LT;跨度+ offer.Title +&LT; / SPAN&GT;&LT; BR /&gt;中;
}); $(#offersDiv)追加(HTML)。
});
} //获取报价
$(文件)。就绪(函数(){
警报('去..');
$(getOffers);
});
&LT; / SCRIPT&GT;
&LT; DIV ID =offersDiv&GT;&LT; / DIV&GT;
&LT; /身体GT;
您的控制器操作返回一个数组(列表与LT;提供&GT;
)。您的JSON结果可能看起来是这样的:
[{姓名:有些名称1},{姓名:有些名称2},...]
所以,你的成功回调里面你可以通过结果循环:
$。的getJSON(调用函数(RSP){
变种的html =;
$。每个(RSP,函数(){
VAR报价=这一点;
HTML + =&LT;跨度&gt;中+ offer.Name +&LT; / SPAN&GT;&LT; BR /&gt;中;
});
$(#offersDiv)追加(HTML)。
});
也把一个断点控制器内的行动,并确保在报价
你实际上返回变量中包含的一些元素。
还要注意的是你有一个失踪结束&GT;你是动态生成
为跨度
元素
我可以与你的code看到的另一个问题是,你可以用你的替换处理的document.ready:
$(getOffers);
Following on from my original question: Not receiving JSONP callback
I am now trying to process the information in the JSONP callback and I cannot seem to get any data to "load" i.e. the rsp
object appears to be empty/null.
VenuOffersDAO (UPDATE: Not using this to simplify things)
This is in a separate class library project outside of the MVC4 project. So, my controller
does not use a 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();
}
}
Controller (UPDATE: Now using a more simple object instead of the generated EF one.)
This is within a ASP.NET MVC4 project.
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 Page
This is within a ASP.NET v4 Web-Forms Project as a plain HTML file.
<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>
Your controller action is returning an array (List<Offer>
). Your JSON result probably looks something like this:
[{"Name":"some name 1"}, {"Name":"some name 2"}, ...]
So inside your success callback you could loop through the results:
$.getJSON(call, function (rsp) {
var html = "";
$.each(rsp, function () {
var offer = this;
html += "<span>" + offer.Name + "</span><br />";
});
$("#offersDiv").append(html);
});
Also put a breakpoint inside your controller action and make sure that the offers
variable that you are returning actually contains some elements.
Also notice that you had a missing closing >
for the span
element you were generating dynamically.
Another problem I can see with your code is that you could replace your document.ready handler with:
$(getOffers);
这篇关于JSONP回调,响应数据为空的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!