Не повезло при попытке использовать JQuery с CakePHP 1.3 - PullRequest
5 голосов
/ 25 августа 2010

Я новичок в cakePHP, но близок к тому, чтобы отказаться от его использования из-за своей неспособности заставить jQuery работать с ним.

Я использую cakePHP 1.3 и поэтому подумал, что помощники Html и Js сделалиJavascript и Ajax избыточны, но я не могу найти какую-либо справку / API-документацию о том, как использовать Js, что достаточно.

Все, что я пытаюсь сделать, в первую очередь, это отправить некоторые данные в cakePHP с помощью jQuery изатем верните некоторые данные в 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');
        }
    });
});

activity_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;
    }
}

Каждый раз, когда я нажимаю кнопку с классом = 'social', я получаюпредупреждение "wut" означает ошибку.

У меня есть компонент RequestHandler и помощники Javascript, Js и Ajax, включенные в мой activity_controller.php.

Кроме того, test.js и jquery.js естьсвязаны с использованием html-> script ();в default.ctp и всех других вещах jQuery работает, так что это не так.

Я также получил это в своем beforeFilter () для actions_controller.php:

if($this->RequestHandler->isAjax())
{
    Configure::write('debug',0);
}
parent::beforeFilter();

Любые идеи, чтонеправильно?Это JQuery или CakePHP?Или и то и другое?

Заранее спасибо,

Infinitifizz

PS

Я никогда раньше не делал AJAX в jQuery, так что, возможно, это как-то связано с этимчто-то не так, я только когда-либо делал простой javascript AJAX.

Ответы [ 4 ]

3 голосов
/ 27 августа 2010

Я ненавижу помощника Ajax в CakePHP ... пока я не нашел это: http://blog.loadsys.com/2009/05/01/cakephp-jquery-ajax-helper-easy-scriptaculous-replacement/

Теперь я могу использовать собственные вызовы CakePHP Ajax с jQuery! Посмотри на это. Я смог решить все свои «простые» проблемы с ajax с помощью этого помощника darg-n-drop ajax. Я просто помещаю это в каталог helpers в моем приложении и заменяю ajax.php, который там есть, и альт! JQuery работает. Вы должны включить скрипт jQuery в макет, конечно. Попробуйте, вы снова полюбите CakePHP!

3 голосов
/ 25 августа 2010

Не сдавайся на CakePHP.Кривая обучения есть, но она того стоит.

Я бы назвал URL следующим образом:

<?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()), хотя я уверен, что какая-то добрая душа скажет мне, почему я должен.

Я предпочитаю именовать методы camelCase в соответствии с соглашением CakePHP.

Обратите внимание, что в этой строке в вашем коде: echo json_encode(array('result'=>'hello'); отсутствует закрывающая скобка.

Кроме того, я бы не стал использовать jQuery для создания простого AJAX, подобного этому, - это может затруднить отладку, но это просто личноепредпочтение.

2 голосов
/ 29 августа 2010

Я бы порекомендовал вам использовать макет CakePHP json для вывода данных из представления вместо эхо-данных json с вашего контроллера.

1 голос
/ 26 августа 2010

Это наверное оффтоп, но ...

Что я делаю, чтобы получить корень приложения в моем javascript:

В /app/views/layout/default.ctp у меня есть следующий код

<?php
echo $javascript->codeBlock("var root = '".$html->url('/')."';");
?>

URL вашего параметра будет выглядеть так:

url: root+'activities/add_activity',

таким образом, даже если ваше приложение находится в подпапке или в домене tld, скрипт будет работать правильно.

Возвращение «wut» для меня означает, что скрипт не смог добраться до страницы в вашем параметре url. Особенно, если вы работаете в подкаталоге, он будет выглядеть в http://server.com/activities/add_activity. Я на 99% уверен, что это проблема:)

Еще одно предложение: удалите Ajax, в то время как предполагалось работать с Prototype , а не с jQuery

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...