2013-02-24 52 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