2013-02-24 92 views
1

從我原來的問題繼:Not receiving JSONP callbackJSONP回調,響應數據爲空

我現在想處理的JSONP回調的信息,我似乎無法得到任何數據「負載」,即rsp對象似乎爲空/空。

VenuOffersDAO(UPDATE:不使用這種簡化的東西)

這是一個單獨的類庫項目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(); 
    } 
} 

控制器(UPDATE:現在使用更簡單的對象,而不是產生一個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

你檢查請求/響應的內容?他們看起來好嗎? – 2013-02-24 17:12:29

回答

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); 
+0

謝謝,EF對象無法用JavasciptSerializer()序列化。我創建了一個更簡單的對象,您的代碼工作。感謝所有的幫助。非常感謝並學習了一些東西! – Seany84 2013-02-24 17:41:58