【问题标题】:JSONP Callback, response data is nullJSONP回调,响应数据为空
【发布时间】:2013-02-09 20:13:48
【问题描述】:

继我最初的问题之后:Not receiving JSONP callback

我现在正在尝试处理 JSONP 回调中的信息,但我似乎无法获取任何要“加载”的数据,即 rsp 对象似乎为空/null。

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-Forms 项目中作为纯 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>

【问题讨论】:

  • 您检查请求/响应的内容了吗?他们看起来还好吗?

标签: asp.net jquery asp.net-mvc-4 jsonp


【解决方案1】:

您的控制器操作正在返回一个数组 (List&lt;Offer&gt;)。您的 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 元素缺少结束 &gt;

我可以看到您的代码的另一个问题是您可以将 document.ready 处理程序替换为:

$(getOffers);

【讨论】:

  • 谢谢,无法使用 JavasciptSerializer() 序列化 EF 对象。我创建了一个更简单的对象,并且您的代码有效。感谢所有的帮助。非常感谢,也学到了一些东西!
猜你喜欢
  • 2016-11-18
  • 2014-02-05
  • 1970-01-01
  • 2012-01-25
  • 2017-07-07
  • 1970-01-01
  • 2019-12-07
  • 2019-11-07
相关资源
最近更新 更多