这是一个有效的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

Client Details
Client Name :    
Mobile No :    
Address :    
  
$(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 });