1

私の元の質問に続いて: JSONP コールバックを受信して​​いません

現在、JSONP コールバックで情報を処理しようとしていますが、「ロード」するデータを取得できないようです。つまり、rspオブジェクトが空/null のように見えます。

VenuOffersDAO (更新: 物事を単純化するためにこれを使用していません)

これは、MVC4 プロジェクト外の別のクラス ライブラリ プロジェクトにあります。したがって、 mycontrollerは 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();
    }
}

コントローラー (更新: 生成された 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 ページ

これは、プレーンな HTML ファイルとして ASP.NET v4 Web フォーム プロジェクト内にあります。

<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>
4

1 に答える 1

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

コードで確認できるもう 1 つの問題は、document.ready ハンドラーを次のように置き換えることができることです。

$(getOffers);
于 2013-02-24T17:12:46.367 に答える