Cakephp 3& Ajax,发送$ .get附加数据

时间:2014-12-23 02:37:00

标签: json ajax cakephp-3.0

我尝试使用来自jquery的$ .get发送自定义数据,但cakephp 3无法识别变量。

这是我在控制器中的功能:

public function view($cat,$id,$page){
        $comments = $this->Comments->find('all')->where(['category =' => $cat, 'AND' => ['category_id =' => $id]])->order(['comments.created' => 'DESC'])
                        ->contain([
                            'Reports' => function($q){return $q->where(['user_id =' => $this->Auth->user('id')]);},
                            'Chars' => function($q){ return $q->select(['id','name','class','race','level','guild_id', 'user_id'])
                            ->contain(['Guilds' => function($q){ return $q->select(['id','name']);
                            }]);
                        }])->limit(3)->page($page);
if($cat == 'Videos'){
                $subject = $this->Comments->Videos->get($id);
            }
            $category = $cat;
            $this->set(compact('subject','comments','category'));
    }
}

这里是.js

$('.more').click(function(){

    $.get($(this).attr('href'),{cat:'Videos',id:'44',page:'2',function(data){
        $('.coms').empty().append(data);
    });
    return false;

});

链接:

<?= $this->Html->link('More', ['controller' => 'Comments','action' => 'view'], ['class' => 'btn btn-primary more']) ?>

.js中的修复值用于测试,如果我使用$ .get(href)发送链接中的数据,它会起作用,但我想知道如何在$ .get请求中传递自定义数据。 / p>

感谢您的帮助

2 个答案:

答案 0 :(得分:1)

CakePHP并不会将查询字符串参数神奇地映射到方法参数,甚至路由都不支持。

您可以通过请求对象

访问查询字符串参数
$this->request->query('cat');

另请参阅 http://book.cakephp.org/3.0/en/controllers/request-response.html#query-string-parameters

答案 1 :(得分:0)

解决方案

嗨,我做了一个api来从json数组中获取我需要的数据。

所以我创建了一个ApiController来完成我需要的所有ajax请求。这是测试示例:

<?php
namespace App\Controller;

use App\Controller\AppController;
use Cake\ORM\TableRegistry;

class ApiController extends AppController
{
    public function test($id)
    {
        $UsersTable = TableRegistry::get('Users');
        $users = $UsersTable->find()->where(['id <' => $id]);
        $this->set(compact('users'));
    }
}
?>

我希望从ajax调用中获取所有用户的列表(这是最糟糕的想法,但它只是用于测试;)

现在我需要为这个视图启用json。为此,我需要在config / routes.php中添加:

Router::scope('/api', function($routes){
  $routes->extensions(['json']);
  $routes->connect('/test/*', ['controller' => 'Api', 'action' => 'test', '_ext' => 'json']);
});

现在当我继续http://localhost/mywebsite/api/test/100时,我有一个json数组,其中所有用户的id都为&lt; 100,准备好被ajax脚本拉。

'_ext' => 'json'

意味着您不必继续使用api / test.json来显示json数组

现在在一个随机控制器的随机视图中,我按下了一个按钮来尝试所有这些,我调用我的javascript文件来执行我的ajax请求。

<button class="test">Test button</button>
<?= $this->Html->script('test', ['block' => true]) ?>

现在我的test.js:

$(document).ready(function(){
  var value = 100;
  $('.test').click(function(){
    $.get('/api/test/' + value, function(data){
        console.log(data);
    });
  });
});

我单击按钮,当我按下F12(在chrome上)时,日志显示一个包含我想要的所有用户的数组。

希望这会有所帮助