【发布时间】:2012-05-05 08:57:04
【问题描述】:
阅读底部编辑以了解解决方法。
我无法在我的 cakephp 应用程序中实现 ajax 分页。我一直在寻找资源和教程来帮助解决这个问题,但大多数处理的是 cake 1.3。我为自己犯了一个明显而简单的错误而祈祷...
到目前为止我所处的位置的描述:我为我的应用程序构建了一个简单的搜索界面 - 一个二手车搜索界面,用于在我的数据库中搜索汽车。搜索界面实际上似乎工作正常。我有一个隐藏表单,它根据用户在搜索表单中的输入创建或销毁隐藏元素。这个隐藏表单通过 Ajax 成功提交,我可以返回一组分页结果,例如“找到 16 个显示的 1-5”。
我似乎遇到的问题是由分页器助手生成的 javascript 增强号、下一个和上一个链接/ajax 请求。
我的 CarsController 有 find_cars 函数,它需要一个 get 请求(我的控制器中的 $paginate var 和视图中的 $this->Paginator 选项都有 dataType = querystring)。该函数在初始表单提交上运行良好,使用 Get 请求 url 如下:http://localhost/myapp/cars/findCars?price=any&year=any&miles=any
我的 ajax.ctp 布局中有 $this->Js->writeBuffer();在 ajax 响应中,我可以看到为 next、number 和 prev 链接编写的 jquery 事件。一个事件的例子:
$("#link-1448104972").bind("click", function (event) {$.ajax({
dataType:"html", evalScripts:true, paramType:"querystring",
success:function (data, textStatus) {
$("#results").html(data);}, url:"\/myapp\/cars\/findCars?price=any&year=any&miles=any&page=2"});
我遇到的问题是 URL 值。当我将 url 粘贴到浏览器中时,我的 find_cars 函数会正确处理参数,因为 &'s 以纯 & 形式发送到控制器。但是,当我单击发送 ajax 请求的分页链接之一时,URL 仍然包含 & 编码的 & 和 $this->request->query;在分页点击后的 var_dump 中看起来像:
array
'price' => string 'any' (length=3)
'amp;year' => string 'any' (length=3)
'amp;miles' => string 'any' (length=3)
'amp;body' =>
array
0 => string '1' (length=1)
1 => string '2' (length=1)
2 => string '6' (length=1)
'amp;page' => string '2' (length=1)
我能在任何地方找到似乎提到同样问题的唯一其他讨论是在 this cakephp lighthouse bug ticket #127 中。但是讨论是针对 cakephp 1.3 的,它链接到的 github 提交是 404。
编辑:我想我还应该补充一点,我正在尝试使用 GET 请求,以便我可以更轻松地实现预期的用户导航和书签功能,以保存搜索查询并使用浏览器在结果中向前和向后导航就像在应用分页链接中一样。
编辑(解决方法/解决方案)- 根据@islandmyth 的建议,我从执行 Get 请求切换到执行 Post,将 paramType 从“querystring”更改为“named”。我将查询信息从 $this->request->named 传递到视图,并将信息保存到 $this->Paginator->options['data'] ,并使用 php 的 http_build_query() 函数来保留嵌套数组。
【问题讨论】:
-
分页链接应该类似于 localhost/cars/findCars/price:any/year:any/miles:any/page:2 并且在控制器中您可以使用 $this->params['named']['year'] 等访问查询字符串
-
@islandmyth 如果我在分页变量和分页器选项中使用 paramType:"named" 而不是 paramType:"querystring",我的分页链接会是这样吗?
-
你能用其他方法实现吗?
-
@islandmyth 我进行了更改以构建分页链接,但仍然出现问题。我从控制器传递原始查询数据以查看并构造一个字符串以设置为 $this->Paginator->options['URL'] 的 URL。我可以得到一个看起来像 localhost/karsquad/cars/findCars/… 的 URL 提交时出现此错误,并回复“/karsquad/cars/findCars/price:any/year:any/miles:any/page:2” url 未找到。当我将该链接粘贴到浏览器中时,它会正确返回第二页结果(在空白 ajax 模板中)。
-
实际上问题在于 Js 助手,即缓冲功能。在 JavaScript 中,ajax URL 包含那个“amp;”。所以 WORK ROUND 解决方案是使用字符串替换您的查询字符串。
标签: ajax cakephp get pagination cakephp-2.1