如何在Yii&amp ;;中加载没有页面重新加载的文章阿贾克斯

时间:2016-03-02 05:53:07

标签: javascript php jquery ajax yii

我有来自数据库的观看文章和每个带有空洞页面加载的文章视图。所以我会在没有重新加载页面的情况下加载文章,我认为这可以使用Ajax,但我对此并不那么强烈。

这是我最初的概念,如下所示:

布局:

CHtml::link($menu['items'][$itemId]['label'],
   array('articles/view',
   'id'=>$menu['items'][$itemId]['link'],
  )
);

// This showing articles name & link

查看:

<?php
    echo $model->article_body;
?>

<script>
   jQuery.ajax({
     type: 'POST',
     dataType: 'html',
     url: ('articles/view'),
     success: function(data){
         document.getElementById('articles').innerHTML = data;
     },
     error: function(){
        alert('Somthing wrong');
     }
   });
</script>

控制器:

public function actionView($id)
{
  $model=$this->loadModel($id);
   $this->render('view',array('model' => $model));
}

有人可以帮助我吗?谢谢

3 个答案:

答案 0 :(得分:0)

你必须返回json:

public function actionView($id)
{
  $model=$this->loadModel($id);
  ...

                echo CJSON::encode(
                    array(
                        'status' => 'success',
                        'content' => $this->renderPartial('view',
                            array(
                                'model' => $model,
                            ),
                            true,
                            true
                        ),
                    )
                );
}

答案 1 :(得分:0)

如果我理解正确的话,

在您的视图文件中。

 echo CHtml::link($menu['items'][$itemId]['label'],
       array('articles/view',
       'id'=>$menu['items'][$itemId]['link'],
      ),array('class'=>'youclassnamehere')
    );
 echo '<div  id="yourDivId"></div>';

在javascript中你的代码应该是类似的东西。

  $(".youclassnamehere").click(function(){
         $.ajax({
          type:'POST',
         url:$(this).attr('href'),
         success:function(data){
           $("#yourDivId").html(data);
         }
         error:function(data){
          alert('Error occured please try again later..');
         }
    }),
   return false;//this will not redirect your page
});

在控制器操作中你的代码就像是

 public function actionView($id)
{
  $model=$this->loadModel($id);
   $this->render('view',array('model' => $model));
}

希望这会对你有所帮助

答案 2 :(得分:0)

我从上面的答案中找到解决方案,但我新添加如下:

array(
   'onclick'=>'javascript:return false'
)