由paginator / jquery帮助程序生成的Ajax URL编码&作为&

时间:2012-04-24 17:12:02

标签: ajax cakephp get pagination cakephp-2.1

阅读底部编辑以获得解决方法。

我在我的cakephp应用程序中实现ajax分页时遇到了麻烦。我已经寻找资源和教程来帮助解决这个问题,但大多数都是关于蛋糕1.3。我的手指越过了一个明显的错误......

我到目前为止的描述:我为我的应用程序构建了一个简单的搜索界面 - 一个用于搜索我数据库中汽车的二手车搜索界面。搜索界面实际上似乎工作正常。我有一个隐藏的表单,根据搜索表单中的用户输入创建或销毁隐藏的元素。这个隐藏的表单是通过Ajax成功提交的,我可以返回一组分页结果,例如“1-5 found of 16 found”。

我似乎遇到的问题是使用javascript增强编号,next和由链接器帮助程序生成的prev链接/ ajax请求。

我的CarsController有find_cars函数,它需要一个get请求(我的控制器中的$ paginate var和视图中的$ this-> Paginator选项都有dataType = querystring)。该功能在初始表单提交时工作正常,其中包含Get请求网址: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值。当我在浏览器中粘贴网址时,我的find_cars函数正确处理参数,因为&'s以普通&发送到控制器。但是,当我单击其中一个发送ajax请求的分页链接时,该URL仍然包含&编码的&符号和$ this-> request->查询;在分页点击后的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()函数来保存嵌套数组。

1 个答案:

答案 0 :(得分:1)

Cake php Ajax Paginator似乎没有正常工作。我也有类似的问题。

我建议你使用cakephp插件Cakephp-DataTable

此插件已实现分页,默认情况下它具有大部分功能。他们还提供了文档,如果您发现任何执行上的任何困难,请访问issues section

此外,开发人员非常敏感,如果您有任何内容,可以获得该插件的说明。