Не получая никаких данных в то время как все параметры передаваемые через вызов ajax jquery равны нулю
Я создаю страницу SearchVendor с 3 выпадающими фильтрами (city/area/vendortype).При прокрутке страницы он должен отображать связанных поставщиков, отфильтрованных пользователем.
Чтобы получить вышеописанный результат я создал
1)Хранимая процедура(значение pagenumber/размер страницы/города/района/vendortype)- Который должен возвращать все данные на основе комбинации фильтров, выбранных пользователем. Если ни один из фильтров не выбран, то он должен возвращать все данные, то есть поставщика.
2)Веб-сервиса(значение pagenumber/размер страницы/города/района/vendortype) - получить данные из базы данных
3)Ajax Jquery - Для логики прокрутки страницы и передачи параметров в веб-сервис.
Моя проблема в том, что
Я получаю правильные данные, когда выбраны все 3 варианта (город/район/тип поставщика).Но он не показывает никакого результата, когда один из вариантов(
city/area/vendortype) не выбирается.
Что я уже пробовал:
<script type="text/javascript"> $(document).ready(function () { var currentPageNumber = 1; loadData(currentPageNumber); $(window).scroll(function () { if ($(window).scrollTop() == $(document).height() - $(window).height()) { currentPageNumber += 1; loadData(currentPageNumber); } }); function loadData(currentPage) { var parcity=$("#lblCityParameter").val(); var pararea = $("#lblAreaParameter").val(); var parvendortype = $("#lblVendortype").val(); $.ajax({ type: 'post', url: 'WebService/VendorService.asmx/GetVendors', data: { pageNumber: currentPage, pageSize: 6, city:parcity, area:pararea, vendortype:parvendortype }, dataType: 'json', //contentType: "application/json; charset=utf-8", success: function (data) { var vendorRepeater = $('#repdata'); $(data).each(function (index, ven) { vendorRepeater.append('<div class="col-md-4 wow fadeInLeft animated" data-wow-delay="0.4s" style="text-align:center"><div id="Div1" class="living_boxauto" runat="server"><a href="/KB/answers/VendorDetails.aspx"?VendorId=' + ven.pID + '"><div class="media"><img runat="server" class="img-responsive" src="images/' + ven.pcoverimage + '" style="width:300px;height:200px;" /><div class="media__body"><h2>Image Title</h2><p>Description</p></div></div></a><div id="Div2" class="living_desc" runat="server"><h3><a href="/KB/answers/VendorDetails.aspx"?VendorId=' + ven.pID + '"><asp:Label ID="lblVendorName" runat="server" Text="' + ven.pvendorname + '" CssClass="lblVendorName"></asp:Label></a></h3><p></p></div></div></div>'); }); } }); } }); </script>
[WebService(Namespace = "http://tempuri.org/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. [System.Web.Script.Services.ScriptService] public class VendorService : System.Web.Services.WebService { public VendorService () { //Uncomment the following line if using designed components //InitializeComponent(); } // public void GetVendors(int pageNumber, int pageSize) [WebMethod] // [ScriptMethod(ResponseFormat = ResponseFormat.Json)] public void GetVendors(int pageNumber, int pageSize, string city, string area, string vendortype) { List<VendorData> listVendors = new List<VendorData>(); string cs = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString; using (SqlConnection con = new SqlConnection(cs)) { SqlCommand cmd = new SqlCommand("spGetVendorbyFilter", con); cmd.CommandType = System.Data.CommandType.StoredProcedure; cmd.Parameters.AddWithValue("@PageNumber", pageNumber); cmd.Parameters.AddWithValue("@PageSize", pageSize); cmd.Parameters.AddWithValue("@city", city); cmd.Parameters.AddWithValue("@area", area); cmd.Parameters.AddWithValue("@vendortype", vendortype); con.Open(); SqlDataReader rdr = cmd.ExecuteReader(); while (rdr.Read()) { VendorData vendor = new VendorData(); vendor.pID = Convert.ToInt32(rdr["VendorID"]); vendor.pvendorname = Convert.ToString(rdr["VendorName"]); vendor.pcoverimage = Convert.ToString(rdr["CoverImage"]); vendor.pcategory = Convert.ToString(rdr["Category"]); listVendors.Add(vendor); } } JavaScriptSerializer js = new JavaScriptSerializer(); Context.Response.Write(js.Serialize(listVendors)); } }
ALTER PROCEDURE [dbo].spGetVendorbyFilter @PageNumber INT, @PageSize INT, @city VARCHAR(200), @area VARCHAR(200), @vendortype VARCHAR(200) AS BEGIN DECLARE @StartRow INT DECLARE @EndRow INT SET @StartRow = ( ( @PageNumber - 1 ) * @PageSize ) + 1; SET @EndRow= @PageNumber * @PageSize; WITH Result AS ( SELECT *, Row_number() OVER ( ORDER BY VendorID ASC) RowNumber FROM tblVendor WHERE (@city IS NULL OR (City = @city)) AND (@area IS NULL OR (Area = @area)) and (@vendortype IS NULL OR (Category = @vendortype)) ) Select * from Result WHERE RowNumber BETWEEN @StartRow And @EndRow END
F-ES Sitecore
Вам не нужно использовать JSON.stringify для переменной данных, это уже строка. Google для того, как вы отправляете данные в веб-сервис через jquery, это очень хорошо документированная проблема.
Member 12915152
@fes-sitecore-Спасибо за ответ. Я обновил свой запрос. Не могли бы вы, пожалуйста, разобраться в этом.
F-ES Sitecore
Предложение "(@area IS NULL OR (Area = @area)) " является правильным, но вы никогда не передаете NULL в @area, если параметр не был указан, вы передаете пустую строку, и SQL не считает это NULL. Дайте парам значения по умолчанию, а затем просто опустите значения для данных, которых у вас нет
СП;
@city VARCHAR(200) = null,
@area VARCHAR(200) = null,
@vendortype VARCHAR(200) = null
затем измените код на что-то вроде
if (! string.IsNullOrWhiteSpace (город))
{
УМК.Параметры.AddWithValue ("@city", город);
}
Tomas Takac
Вам нужно использовать кнопку "ответить", иначе пользователь не будет уведомлен о вашем комментарии.
Member 12915152
Спасибо, Томас Такак.