#php #ajax #yii
#php #ajax #yii
Вопрос:
Я схожу с ума от этого. Я запрашиваю вызов ajax в нескольких местах, и ни один из этих вызовов ajax в последнее время не работает корректно. Сегодня я решил начать с нового раздела с ajax call. То же самое со всеми остальными. Прошло несколько дней, когда данные ajax не отправлялись на контроллер — всегда пусто.
Вот один из них. Я пытаюсь разрешить пользователям голосовать вверх / вниз по щелчку CButtonColumn
{up}{down}
. Эта сетка просмотра «_vote.php » генерируется путем renderPartial
использования TbTabs
. renderpartial
В true
последнем параметре я установил значение.
Хорошо, далее сетка. Вот оно:
<?php $this->widget('bootstrap.widgets.TbGridView', array(
'type'=>'condensed',
'id'=>'vote',
'dataProvider'=>$dataProvider,
'template'=>"{items}",
'ajaxUpdate'=>true,
'columns'=>array(
array(
'class'=>'CButtonColumn',
'template' => '{up} {down}',
'buttons' => array(
'up' => array(
'label'=>'<i class="fa fa-thumbs-up"></i>',
'imageUrl'=>false,
'url'=>'Yii::app()->createUrl("prod/votecommentup", array("id"=>$data->primaryKey))',
'click'=>' function(){
$.fn.yiiGridView.update("vote", {
type:"POST",
url:$(this).attr("href"),
success:function(data) {
$.fn.yiiGridView.update(vote);
}
}',
),
'down'=> array(
'label'=>'<i class="fa fa-thumbs-down"></i>',
'imageUrl'=>false,
'url'=>'Yii::app()->createUrl("prod/votecommentdown", array("id"=>$data->primaryKey))',
'click'=>' function(){
$.fn.yiiGridView.update("vote", {
type:"POST",
url:$(this).attr("href"),
success:function(data) {
$.fn.yiiGridView.update(vote);
}
}',
),
),
),
),
)); ?>
Хорошо … далее, URL «prod / votecommentup», который почти идентичен votecommentdown. Вот оно:
public function actionVoteCommentUp($id){
$model = $this->loadModel($id);
if(isset($_POST['VoteThis']))
{
$model->attributes=$_POST['VoteThis'];
$model->prototype_review_id = $id;
$model->user_id = Yii::app()->user->user_id;
$model->vote = "Y";
echo CJSON::encode(array('status'=>'saved'));
}echo CJSON::encode(array('status'=>'not post')); //always give me a no post
}
Ответ №1:
Я рекомендую протестировать ваши вызовы через что-то вроде приложения Postman для Chrome. Это даст вам возможность отлаживать ваши вызовы API / AJAX независимо от вашего представления. Как только вы убедитесь, что API / AJAX работает правильно, вы можете интегрировать его в представление. Это позволяет вам разделить процесс отладки и, надеюсь, сделать вещи более прозрачными в отношении того, что функционально, а что нет.