这是一个有效的jquery回调函数调用吗?
我执行这样的函数,
$(document).ready(function() { getEntities("Clients/GetClients", 0, formatClientsResult); var maxvalues = $("#HfId").val(); $(".pager").pagination(maxvalues, { callback: getEntities("Clients/GetClients", formatClientsResult), current_page: 0, items_per_page: 5, num_display_entries: 5, next_text: 'Next', prev_text: 'Prev', num_edge_entries: 1 }); }); $(function() { $.ajaxSetup({ contentType: 'application/json; charset=utf-8', global: false, async: false, dataType: 'json', beforeSend: function() { $('.loading').show(); }, complete: function() { $('.loading').hide(); } }); }); function getEntities(url, currentPage, formatResultFunction) { $.ajax({ url: url, data: { 'currentPage': (currentPage + 1), 'pageSize': 5 }, success: function(data) { if (data.isRedirect && data.isRedirect === true) { alert('must redirect to ' + data.redirectUrl); location = 'http://www.google.com'; } else { var divs = ''; $("#hfId").val(''); $("#ResultsDiv").empty(); $.each(data.Results, function() { divs += formatResultFunction(this); }); $("#ResultsDiv").append(divs); $(".resultsdiv:even").addClass("resultseven"); $(".resultsdiv").hover(function() { $(this).addClass("resultshover"); }, function() { $(this).removeClass("resultshover"); }); $("#HfId").val(""); $("#HfId").val(data.Count); } } }); return false; } function formatClientsResult(result) { return '
' + result.ClientName + 'Mobile No : ' + result.ClientMobNo + '
Address : ' + result.ClientAddress + ''; }
我通过萤火虫检查我发现我的要求是,
http://localhost:1115/0?currentPage=[object+HTMLDivElement]1&pageSize=5
…我错过了什么……
在初始加载时执行请求是,
http://localhost:1115/Clients/GetClients?currentPage=1&pageSize=5
这似乎工作但只有回调函数失败…
我正在使用这个jquery分页插件
正如达林所说,
$(document).ready(function() { getEntities("Clients/GetClients", 0, formatClientsResult); var maxvalues = $("#HfId").val(); $(".pager").pagination(maxvalues, { callback: function() { getEntities("Clients/GetClients", 0, formatClientsResult); }, current_page: 0, items_per_page: 5, num_display_entries: 5, next_text: 'Next', prev_text: 'Prev', num_edge_entries: 1 });
我的控制器动作,
public JsonResult GetClients(int currentPage, int pageSize) { if (Session["userId"]!=null) { var clients = clirep.FindAllClients(Convert.ToInt32(Session["userId"])).AsQueryable(); var count = clients.Count(); var results = new PagedList(clients, currentPage - 1, pageSize); var genericResult = new { Count = count, Results = results ,isRedirect=false}; return Json(genericResult); } else { var genericResult = new {redirectUrl = Url.Action("Create", "Registration"), isRedirect = true }; return Json(genericResult); } }
而我的模特,
public IQueryable FindAllClients(int userId) { var client = from c in taxidb.Clients where c.CreatedBy == userId && c.IsDeleted == 0 select new ClientBO() { ClientId = c.ClientId, ClientName= c.ClientName, ClientMobNo= Convert.ToString(c.ClientMobNo), ClientAddress= c.ClientAddress }; return client; }
我的看法
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %> Index Clients
$(document).ready(function() { // getClients(0); getEntities("Clients/GetClients", 0, formatClientsResult); var maxvalues = $("#HfId").val(); $(".pager").pagination(maxvalues, { callback: function() { getEntities("Clients/GetClients", 0, formatClientsResult); }, current_page: 0, items_per_page: 5, num_display_entries: 5, next_text: 'Next', prev_text: 'Prev', num_edge_entries: 1 }); var validator = $("#addform").validate({ rules: { Name: "required", MobileNo: { required: true, number: true, minlength: 10 }, Address: "required" }, messages: { Name: "please provide a client name", MobileNo: { required: "Please provide a mobile phone no", number: "Please provide a mobile phone no", rangelength: jQuery.format("Enter at least {0} characters") }, Address: "please provide client address" }, // the errorPlacement has to take the table layout into account errorPlacement: function(error, element) { error.appendTo(element.parent().next()); }, // set this class to error-labels to indicate valid fields success: function(label) { // set as text for IE label.html(" ").addClass("checked"); }, submitHandler: function(form) { if ($("#hfEditId").val() == "") { $.ajax({ url: "Clients/ClientCreate", data: { 'clientName': $("#Name").val(), 'clientMobNo': $("#MobileNo").val(), 'clientAddress': $("#Address").val() }, contentType: "application/json; charset=utf-8", global: false, async: false, dataType: "json", beforeSend: function() { $('.loading').show(); }, complete: function() { $('.loading').hide(); }, success: function(data) { if (data.Result == "Success") { $("#hfEditId").val(''); $("#addform").clearForm(); getEntities("Clients/GetClients", 0, formatClientsResult); $("#adddiv").hide(); $("#ResultsDiv").show(); $("#PagerDown").show(); $("#ImageButtonDiv").show(); var maxvalues = $("#HfId").val(); $(".pager").pagination(maxvalues, { callback: getEntities("Clients/ClientCreate", 0, formatClientsResult), current_page: 0, items_per_page: 5, num_display_entries: 5, next_text: 'Next', prev_text: 'Prev', num_edge_entries: 1 }); $("#alert").remove(); topBar('successfully added'); return false; } } }); } else { $.ajax({ url: "Clients/Clientupdate", data: { 'clientId': $("#hfEditId").val(), 'clientName': $("#Name").val(), 'clientMobNo': $("#MobileNo").val(), 'clientAddress': $("#Address").val() }, contentType: "application/json; charset=utf-8", global: false, async: false, dataType: "json", beforeSend: function() { $('.loading').show(); }, complete: function() { $('.loading').hide(); }, success: function(data) { if (data.Result == "Success") { $("#hfEditId").val(''); $("#addform").clearForm(); getEntities("Clients/GetClients", 0, formatClientsResult); $("#adddiv").hide(); $("#ResultsDiv").show(); $("#PagerDown").show(); $("#ImageButtonDiv").show(); var maxvalues = $("#HfId").val(); $(".pager").pagination(maxvalues, { callback: getEntities("Clients / Clientupdate", 0, formatClientsResult), current_page: 0, items_per_page: 5, num_display_entries: 5, next_text: 'Next', prev_text: 'Prev', num_edge_entries: 1 }); $("#alert").remove(); topBar('successfully updated'); return false; } } }); } } }); });
getEntities
函数需要3个参数。 在这里你只通过2:
callback: getEntities("Clients/GetClients", formatClientsResult)
第二个参数也需要是整数而不是另一个函数。 因为它是一个回调,它需要定义如下:
callback: function() { getEntities("Clients/GetClients", 0, formatClientsResult); }
更新:
你总是得到相同的AJAX请求的原因是你总是将0传递给分页回调中的getEntities
函数。
试试这个:
$(".pager").pagination(maxvalues, { callback: function (new_page_index, pagination_container) { // Notice how the new_page_index is passed getEntities("home/GetClients", new_page_index, formatClientsResult); }, current_page: 0, items_per_page: 5, num_display_entries: 5, next_text: 'Next', prev_text: 'Prev', num_edge_entries: 1 });
我假设您正在使用的分页插件的回调在内部定义为
opts.callback(current_page, containers);
这与回调的签名不同,所以不会有相同的function。
显然, getEntities()
的currentPage
参数是一个对象,因此向它添加1并不是一个明智的操作。 用firebug检查currentPage
的类型和内容是什么。
试试这个:
$(document).ready(function() { var helper = function() { getEntities("Clients/GetClients", 0, formatClientsResult); }; helper(); var maxvalues = $("#HfId").val(); $(".pager").pagination(maxvalues, { callback: helper, current_page: 0, items_per_page: 5, num_display_entries: 5, next_text: 'Next', prev_text: 'Prev', num_edge_entries: 1 });