Javascript 尝试将JQuery与CakePHP1.3结合使用时运气不佳
我是cakePHP新手,但由于无法让jQuery使用它,我几乎要放弃使用它了 我使用的是CakePHP1.3,所以我认为Html和Js帮助程序使Javascript和Ajax变得多余,但我真的找不到任何关于如何使用Js的帮助/api文档 我首先要做的就是用jQuery将一些数据发送到cakePHP,然后将一些数据返回到jQuery中并发出警报()。出于某种原因,这根本不起作用。这是我的密码: test.jsJavascript 尝试将JQuery与CakePHP1.3结合使用时运气不佳,javascript,ajax,cakephp,jquery,Javascript,Ajax,Cakephp,Jquery,我是cakePHP新手,但由于无法让jQuery使用它,我几乎要放弃使用它了 我使用的是CakePHP1.3,所以我认为Html和Js帮助程序使Javascript和Ajax变得多余,但我真的找不到任何关于如何使用Js的帮助/api文档 我首先要做的就是用jQuery将一些数据发送到cakePHP,然后将一些数据返回到jQuery中并发出警报()。出于某种原因,这根本不起作用。这是我的密码: test.js $('.social').click(function() { $.ajax({
$('.social').click(function()
{
$.ajax({
type: 'POST',
url: '/activities/add_activity',
data: 'type=social',
dataType: 'json',
success: function(data)
{
alert(data);
},
error: function()
{
alert('wut');
}
});
});
活动\u 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()for activities_controller.php中也有这样的内容:
if($this->RequestHandler->isAjax())
{
Configure::write('debug',0);
}
parent::beforeFilter();
你知道怎么了吗?它是jQuery还是cakePHP?或者两者都有
提前感谢,
无限化
附言
我以前从未在jQuery中使用过AJAX,所以可能是因为它搞乱了,我只使用过简单的javascript AJAX。不要放弃CakePHP。有一个学习曲线,但它是值得的 我会像这样指定url:
<?php $Url = Router::url(array('controller'=>'activities','action'=>'addActivity'),true); ?>
$('.social').click(function()
{
$.ajax({
type: 'POST',
url: '<?php echo $Url ?>';
...
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——这会使调试变得困难,但这只是个人喜好。这可能是离题的,但是 为了让应用程序的根在javascript中,我做了什么: 在/app/views/layout/default.ctp中,我有以下代码
<?php
echo $javascript->codeBlock("var root = '".$html->url('/')."';");
?>
这样,即使应用程序位于子文件夹或tld域中,脚本也能正常工作
为我返回“wut”意味着脚本无法访问url参数中的页面。特别是如果您在子目录中工作,它将查找。我99%确定这就是问题所在:)
另一个建议是:在使用jQuery时删除Ajax,我讨厌CakePHP中的Ajax助手。。。直到我发现这个:
现在我可以在jQuery中使用本机CakePHP Ajax调用了!看看这个。我能够用这个darg-n-drop ajax助手替代品解决所有“简单”的ajax问题。我只是把它放到我应用程序的helpers目录中,然后替换那里的ajax.php和viola!jQuery正在工作。当然,您需要在布局中包含jQuery脚本。试试看,你会再次爱上CakePHP 我建议您使用CakePHP json布局从视图输出数据,而不是从控制器输出echo json数据 在这种情况下,打开debug会非常有帮助——特别是在出现PHP错误的情况下,将其设置为“1”级别。尝试为ajax请求启用该级别,并查看您的Cake日志(
/app/tmp/logs/*
)中是否报告了任何内容。尝试将此包含在您的Cake方法中:$this->log(“调试消息”),log\u DEBUG;查看是否正在调用该方法。检查app/tmp/logs/debug.log中的输出注意,您可以传递变量,甚至是数组来代替消息字符串。另外,在Firefox中使用Firebug来监视网络活动(在“网络”选项卡上)。啊!谢谢对不起,大家回复得太晚了,我已经离开了一个星期,但是谢谢尼克,因为这个,我至少能到达那里!在我将该行添加到default.ctp后,它现在调用该函数,但我总是返回'wut',这意味着至少jQuery正在运行,但总是得到错误…关于下一步要做什么的提示?哦,差点忘了,我还将add_activity函数改为使用$this->javascript。。。就像Leo之前说的那样,这可能也有帮助。啊,刚刚使用了firebug,似乎cakephp正在发回一个错误,该错误似乎包含“警告:DbAcl::check()-权限检查中的ARO/ACO节点查找失败。节点引用”,然后它显示了用户表中的用户记录以及用户数组。所以我认为这是一个ACL问题,我现在将add_activity()添加到allow()权限中,所以现在我从jQuery中获得了成功!但是…警报(数据)只是给了我“[object]”这是因为响应不是json吗?我对JSON非常陌生,只是因为它在教程中才尝试过……耶,现在可以用了!很抱歉,在我不知道如何访问数据之前,我没有使用JSON,doing alert(data.result)返回“hello”,这是它应该做的:D现在我的下一步是让cakePHP理解额外的数据“data:'type=social'”,然后确定按下了“social”按钮…谢谢大家的帮助,顺便说一句,没有你我是做不到的:)乳清!在本教程中,他将值从jQuery传递到cakephp,也解决了第二个问题:
url: root+'activities/add_activity',