Inf*_*izz 5 javascript ajax jquery cakephp
我是cakePHP的新手,但由于我无法使jQuery与它一起工作,因此接近退出使用它.
我正在使用cakePHP 1.3,所以认为Html和Js助手已经使Javascript和Ajax冗余,但我真的找不到任何关于如何使用Js的帮助/ api文档就足够了.
我首先要做的就是用jQuery将一些数据发送到cakePHP,然后将一些数据返回到jQuery并提醒()它.出于某种原因,这只是不起作用.这是我的代码:
test.js
$('.social').click(function()
{
$.ajax({
type: 'POST',
url: '/activities/add_activity',
data: 'type=social',
dataType: 'json',
success: function(data)
{
alert(data);
},
error: function()
{
alert('wut');
}
});
});
Run Code Online (Sandbox Code Playgroud)
activities_controller.php
function add_activity()
{
if($this->RequestHandler->isAjax())
{
$this->autoRender = false;
$this->autoLayout = false;
$this->header('Content-Type: application/json');
echo json_encode(array('result'=>'hello');
return;
}
}
Run Code Online (Sandbox Code Playgroud)
每当我点击带有class ='social'的按钮时,我都会收到警告"wut",这意味着错误.
我有我的activities_controller.php中包含的RequestHandler组件和Javascript,Js和Ajax助手.
另外,test.js和jquery.js使用html-> script()进行链接; 在default.ctp和所有其他jQuery的东西工作,所以它不是那样的.
我也在我的beforeFilter()中为activities_controller.php得到了这个:
if($this->RequestHandler->isAjax())
{
Configure::write('debug',0);
}
parent::beforeFilter();
Run Code Online (Sandbox Code Playgroud)
有什么想法有什么不对?它是jQuery的东西还是cakePHP的东西?或两者?
提前致谢,
Infinitifizz
PS
我之前从未在jQuery中完成过AJAX,所以也许它与搞乱的东西有关,我只做过简单的javascript AJAX.
不要放弃 CakePHP。虽然有一个学习曲线,但这是值得的。
我会像这样指定网址:
<?php $Url = Router::url(array('controller'=>'activities','action'=>'addActivity'),true); ?>
$('.social').click(function()
{
$.ajax({
type: 'POST',
url: '<?php echo $Url ?>';
...
Run Code Online (Sandbox Code Playgroud)
在 CakePHP 方面,我的方法是这样的:
function addActivity()
{
$this->autoRender = false;
$this->autoLayout = false;
App::import('Helper', 'Javascript');
$javascript = new JavascriptHelper();
echo($javascript->object(array('result'=>'hello')));
exit(1);
}
Run Code Online (Sandbox Code Playgroud)
我从不使用,if($this->RequestHandler->isAjax())尽管我确信有好心人会告诉我为什么应该使用。
我更喜欢使用符合 CakePHP 约定的驼峰式方法名称。
请注意,代码中的这一行:echo json_encode(array('result'=>'hello');缺少右括号。
另外,我不会使用 jQuery 来执行像这样的简单 AJAX - 它会使调试变得困难,但这只是个人喜好。