JSONP回调,响应数据为空 [英] JSONP Callback, response data is null

查看:195
本文介绍了JSONP回调,响应数据为空的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是我原来的问题继:没有收到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; D​​IV 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆