AJAX请求不被识别

我有一个可以搜索的项目列表,页面有分页。 输入搜索查询时,部分视图会正确加载(AJAX)。 但是,当您使用分页时,它会触发非ajax请求(整个页面将被重新加载,并且标头中没有XmlHttpRequest标志)。

是什么导致这个?

$(function () { // Adds Ajax to pagination of search results var getPage = function () { var $a = $(this); var options = { url: $a.attr("href"), type: "get", data: $("form").serialize() }; $.ajax(options).done(function (data) { var $target = $a.parents("div.pagedlist").attr("data-nn-target"); var $newHtml = $(data); $target.html($newHtml); $newHtml.effect("highlight"); }); // Prevent default action return false; }; $(".main-content").on("click", ".pagedlist a", getPage); });  
// content
@Html.PagedListPager(Model, page => Url.Action("Index", new { page }), PagedListRenderOptions.MinimalWithItemCountText)

根据教程,这行代码应该解决了你不能使用分页结果集的问题。

data: $("form").serialize()

  public ActionResult Index(string query = "", int page = 1) { IPagedList model; if (Request.IsAjaxRequest()) { model = ViewModelFactory.Instance.CreateShowViewModels(_showRepository.GetShows() .Where( x => x.Title.ToLower() .Contains( query.ToLower()))) .OrderByDescending(x => x.LatestRelease).ToList().ToPagedList(page, 15); ViewBag.Search = query; return PartialView("_Shows", model); } model = ViewModelFactory.Instance.CreateShowViewModels(_showRepository.GetShows()).OrderByDescending(x => x.LatestRelease).ToList().ToPagedList(page, 15); ViewBag.Search = null; return View(model); } 

当我在ViewPartialView调用中都放置一个断点时,每当我使用分页时它就会触及View (因此每次都会显示所有数据)。 为什么我的请求不被视为AJAX?

确保.main-content是您的分页链接的真正祖先; 否则,事件delgation $(".main-content").on("click", ".pagedlist a", getPage)将不起作用。

更新

后续问题。 这个:

 var $target = $a.parents("div.pagedlist").attr("data-nn-target"); 

……应该是这样的:

 var $target = $($a.parents("div.pagedlist").attr("data-nn-target")); 

这是因为attr("data-nn-target")只会给你选择器 ,而不是使用该选择器的jQuery对象。