Yii ajax issues


Yii ajax issues

我之前创建了一个问题,我想了解 Yii 中使用 ajax 的工作原理。所以,我正在尝试实现一个答案。我创建了控制器并放入控制器目录中:

<?php
class AjaxController extends CController
{
    public function 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);
        // }
    }
}
?> 

在我看来,我也有这个带有脚本的片段。

<script>
$(document).on('click','div.lessonDiv', function() {
    $.ajax({
        type: "POST",
        url: <?php /*Also I tried just DoThing instead of actionDoThing, this doesn't work*/echo $this->createUrl('AjaxController/actionDoThing'); ?>,
        success: function(data, textStatus, jqXHR) 
        {
            console.log(data);
        }
    });
});
</script>

不知道怎么了,但控制台说:

Uncaught SyntaxError: Invalid flags supplied to RegExp constructor 'actionDoThing'

我现在错在哪里?

看起来您忘记了 URL 周围的引号:

$.ajax({
    type: "POST",
    url: "<?php echo $this->createUrl('AjaxController/actionDoThing'); ?>",
    success: function(data, textStatus, jqXHR) {
        console.log(data);
    }
});

首先

将 Js 代码包装在里面

$(function{
// your code here
});

所以你的代码看起来像

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

第二件事:

AjaxController/actionDoThing 更改为 ajax/doThing

所以你的最终代码会像

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