我之前创建了一个问题,我想了解 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);
}
});
});
});