尝试在CakePHP 1.3中使用JQuery时没有运气

时间:2010-08-25 14:33:08

标签: javascript ajax cakephp jquery

我是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。

4 个答案:

答案 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