我是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');
}
});
});
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;
}
}
每次点击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();
任何想法有什么不对?它是jQuery的东西还是cakePHP的东西?或两者兼而有之?
提前致谢,
Infinitifizz
P.S。
之前我从来没有在jQuery中完成过AJAX,所以也许它与搞乱的东西有关,我只做过简单的javascript AJAX。
答案 0 :(得分:3)
不要放弃CakePHP。有一个学习曲线,但它是值得的。
我会像这样指定网址:
<?php $Url = Router::url(array('controller'=>'activities','action'=>'addActivity'),true); ?>
$('.social').click(function()
{
$.ajax({
type: 'POST',
url: '<?php echo $Url ?>';
...
在CakePHP方面,我的方法是这样的:
function addActivity()
{
$this->autoRender = false;
$this->autoLayout = false;
App::import('Helper', 'Javascript');
$javascript = new JavascriptHelper();
echo($javascript->object(array('result'=>'hello')));
exit(1);
}
我从不使用if($this->RequestHandler->isAjax())
虽然我确信某个善良的灵魂会告诉我为什么要这样做。
我更喜欢使用符合CakePHP约定的camelCase方法名称。
请注意,代码中的这一行:echo json_encode(array('result'=>'hello');
缺少结束括号。
另外,我不会像这样使用jQuery做简单的AJAX - 这会让调试变得困难,但这只是个人偏好。
答案 1 :(得分:3)
我讨厌CakePHP中的Ajax Helper ......直到我发现这个:http://blog.loadsys.com/2009/05/01/cakephp-jquery-ajax-helper-easy-scriptaculous-replacement/
现在我可以使用jQuery的原生CakePHP Ajax调用了!看看这个。我能用这个darg-n-drop ajax辅助替换来解决我所有的“简单”ajax问题。我只是把它放到我的应用程序中的helpers目录中,并替换那里的ajax.php和中提琴! jQuery正在工作。您需要在布局中包含jQuery脚本。试试吧,你会再次爱上CakePHP!
答案 2 :(得分:2)
我建议您使用CakePHP json布局从视图输出数据,而不是从控制器输出echo json数据。
答案 3 :(得分:1)
这可能是offtopic,但是......
我的工作是为了将应用程序的根目录放在我的javascript中:
在/app/views/layout/default.ctp中我有以下代码
<?php
echo $javascript->codeBlock("var root = '".$html->url('/')."';");
?>
您的参数网址将如下所示:
url: root+'activities/add_activity',
这种方式即使您的应用程序位于子文件夹或tld域中,脚本也能正常工作。
为我返回“wut”意味着脚本无法访问url参数中的页面。特别是如果您在子目录中工作,它将查看http://server.com/activities/add_activity。我99%肯定这是问题:)
另一个建议:在it was meant to work with Prototype而不是jQuery
时删除Ajax