Попробуйте вот такую конструкцию воспроизвести. Делаю через function, потому что обилие pjax блоков мешает правильно обрабатывать jquery события. функцией все проще.
action должен вернуть у вас массив, который вы должны будете обработать в ответе (respond).
Пример экшна:
public function actionTest(){
\Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
$out['error'] = 0;
$out['html'] = 'html block';
$out['per'] = 1;
return $out;
}
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
</head>
<body>
<div class="blocks">
<div class="block" data-attr='1'>
<a href="" onclick="clickme(this); return false;">click me</a>
</div>
<div class="block" data-attr='2'>
<a href="" onclick="clickme(this); return false;">click me</a>
</div>
<div class="block" data-attr='3'>
<a href="" onclick="clickme(this); return false;">click me</a>
</div>
</div>
</body>
</html>
<script>
function clickme(obj) {
alert($(obj).parents('.block').attr('data-attr'));
var id = $(obj).parents('.block').attr('data-attr');
$.post(
"/url",
{
id: id
},
function(respond) {
if (respond['error'] == '0') { //если ошибки нет то продолжаем
} else if (respond['error'] == '1') {
alert(respond['text']);
}
}
);
}
</script>