Javascript 尝试将JQuery与CakePHP1.3结合使用时运气不佳

Javascript 尝试将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({

我是cakePHP新手,但由于无法让jQuery使用它,我几乎要放弃使用它了

我使用的是CakePHP1.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');
        }
    });
});
活动\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',