2013-02-24 3 views
1

Исходя из моего первоначального вопроса: Not receiving JSONP callbackJSONP Обратный вызов, данные ответа равна нулю

Я сейчас пытаюсь обработать информацию обратного вызова JSONP и я не могу показаться, чтобы получить какие-либо данные в «нагрузку», то есть rsp объекта кажется пустым/null.

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(); 
    } 
} 

Controller (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 Page

Это в ASP.NET v4 веб-форм проекта как обычный 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

Вы проверили содержание запроса/ответа? Они выглядят нормально? –

ответ

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

Смежные вопросы