2014-02-01 3 views
0

Мой индекс после списка контроллеров все сообщения следующим образомYii Frameworrk Ajax Ссылка

<?php $this->widget('zii.widgets.CListView', array(
    'dataProvider'=>$dataProvider, 
    'itemView'=>'_view', 
    'template'=>"{items}\n{pager}", 
)); ?> 

Мой взгляд _view имеет АЯКС-ссылку

<div id="comments"></div> 
<?php echo CHtml::ajaxLink('List Comments', array('listComments'), 
     array('update' => '#comments'))?> 

listComments является функцией в моем PostController

public function actionListComments() 
    { 
      $this->renderPartial('_comments',array(
      'post'=>$model, 
      'comments'=>$model->comments, 
      )); 

    } 

Когда я нажимаю на ссылку ajax, ничего не происходит,

указывает на localhost/блог/#

Помогите мне пожалуйста?

ответ

0

Проблема заключается в том, что метод actionListComments() возвращает не-200 HTTP-код из-за неопределенной переменной $ model в нем. Попробуйте что-то вроде этого:

_view:

<div id="comments"></div> 
<?php echo CHtml::ajaxLink('List Comments', array('listComments', 'id' => $data->id), 
    array('update' => '#comments'))?> 

PostController:

public function actionListComments($id) 
{ 
    $model = Posts::model()->findByPk($id); 

    if($model !== null) 
     $this->renderPartial('_comments',array(
      'post'=>$model, 
      'comments'=>$model->comments, 
     )); 
    else 
     Yii::log('Unknown post with $id ' . $id, 'error'); 
} 
0

Первый в actionListComments() у вас есть переменная $model, которую вы не инстанцированный.

Предполагая, что вы получаете $model->id из ссылки он должен измениться:

<?php echo CHtml::ajaxLink('List Comments', array('listComments','id'=>$data->id), 
    array('update' => '#comments'))?> 

Далее, ваш actionListComments() должен получить доступ к id, использовать это, чтобы загрузить модель и ее комментарии, и отправить на требуемое вид

public function actionListComments($id){ 
    $model=$this->loadModel($id); 
    $this->renderPartial('_comments',array('model'=>$model)); 
} 

Там нет необходимости посылать $model->comments как мы уже отправка $model поэтому мы можем получить доступ к $model->comments.

0

Многие вещи могут пойти не так. Как Ajax звонки не могут быть отлажены с нормальным compnonents как

CVarDumper::Dump(); 
die(); 

Приведенных выше кода не будет показывать вам что-нибудь в области браузера. Лучший способ для отладки вызовов ajax - использовать inspectElement. Нажмите на Network. Теперь, когда вы нажмете на ajaxLink, он покажет вам, успешно ли был отправлен запрос ajax. Он будет красным, если запрос не увенчался успехом. Когда вы нажимаете на сделанный запрос. Он покажет вам 3 вкладки справа от имени Header, Preview, Response. Как вы хотите сделать страницу таким образом, чтобы тип контента был text/html. enter image description here

Что касается вашего кода, ясно, что вы используете $ model, не создавая его, чтобы он возвращал ошибку. Прочтите исправленную в вашем случае ошибку.