Yii Ajax on click

2019-08-29 23:05发布

问题:

I have some app on Yii. I want to implement ajax calls on click of div. I've found some docs with form ajax validation, but it'snot clear for me, how can I do what I want. That's what I did:

$(document).on('click','div.lessonDiv', function()
    {
       $.ajax(
        {
            type: "POST",
            url: "../../protected/controllers/AjaxController.php",
            success: function(data, textStatus, jqXHR)
            {
                console.log(data);
            }
        });
}

That says that the directory is forbidden. Where should I put file which is able to interact with ajax? Or it alreay has it?
UPDATE I'm using version 1.1.

回答1:

You shouldn't call files directly, Yii doesn't work this way. It is MVC framework with controllers and actions and it uses routes, also for AJAX request. So you should add an action to AjaxController and call createUrl to get it's URL.

PHP

class AjaxController extends CController
{
    public funcion actionDoThing()
    {
        // Get request object
        $request = Yii::app()->request;

        // Check if request is acceptable
        if ($request->isPost && $request->isAjaxRequest)
        {
            echo CJSON::encode(array('hello'=>'world'));
        }
        // else
        // {
        //     throw new CHttpException(403);
        // }
    }
}

JS

$(document).on('click','div.lessonDiv', function() {
    $.ajax({
        type: "POST",
        url: <?php echo $this->createUrl('ajax/doThing'); ?>,
        success: function(data, textStatus, jqXHR) {
            console.log(data);
        }
    });
});

I'd recommend to read Yii guide more closely. It is also available in Russian



回答2:

Try this

$(function(){
        $(document).on('click','div.lessonDiv', function()
    {
       $.ajax(
        {
            type: "POST",
            url: "<?php echo Yii::app()->createUrl('Ajax/index'); ?>",
            success: function(data, textStatus, jqXHR)
            {
                console.log(data);
            }
        });
});
    });

To learn about createUrl() in YII click here