внутри него есть форма, форма добавления комментария ...
и еще внутри него есть комментарии обернутые тоже в pjax т.к. у каждого комментария есть форма ответа ...
так вот когда я добавляю ответы то обновляется только блок с самим комментарием не трогая другие комментарии ... отрабатывает внутренний pjax ...
когда же я добавляю комментарий то обновляются все комментарии ... чтоб отобразить новый ... это отрабатывает внешний pjax ... и вот после этого начинает творится магия, у старых комментариев форма при отправке отправляет два раза почемуто
в логах браузера я наблюдаю такую картину ...
Код: Выделить всё
add?doc_id=138&answer=483 POST (canceled) xhr jquery.js:9175 0 B 21 ms
add?doc_id=138&answer=483 POST 200 xhr jquery.js:9175 9.9 KB 2.29 s
код сократил чтоб div и прочее не мешало ... вот как это выглядит:
Код: Выделить всё
<?
$pjax_id = 'pj_comments';
Pjax::begin([
'enablePushState' => false,
'id' => $pjax_id,
'formSelector' => '#'.$pjax_id.' form[data-pjax-comments]',
'linkSelector' => '#'.$pjax_id.' a[data-pjax-comments]'
]);
?>
<? foreach($comments as $comment): ?>
<?//------------------------------------------?>
<?
$pjax_id = 'pj_comment_'.$comment->comment_id;
Pjax::begin([
'enablePushState' => false,
'id' => $pjax_id,
'formSelector' => '#'.$pjax_id.' form[data-pjax-comment]',
'linkSelector' => '#'.$pjax_id.' a[data-pjax-comment]'
]);
?>
<? $form = ActiveForm::begin(['action' => Url::toRoute(['/manual/doc-comment/add', 'doc_id' => $doc_id, 'answer' => $comment->comment_id]), 'options'=>['data-pjax-comment' => 1]]); ?>
<textarea class="form-control" id="answer_<?=$comment->comment_id?>" name="comment" style="vertical-align: bottom; resize: none" rows="1"></textarea>
<button class="btn btn-success" type="submit">Ответить</button>
<? ActiveForm::end() ?>
<? Pjax::end(); ?>
<?//------------------------------------------?>
<? endforeach; ?>
<? $form = ActiveForm::begin(['action' => Url::toRoute(['/manual/doc-comment/add', 'doc_id' => $doc_id]), 'options' => ['data-pjax-comments' => 1]]); ?>
<textarea class="form-control" id="comment" name="comment" style="vertical-align: bottom; resize: none" rows="1"></textarea>
<button class="btn btn-success" type="submit">Добавить <span class="hidden-xs">комментарий</span></button>
<? ActiveForm::end() ?>
<? Pjax::end(); ?>
https://yadi.sk/d/eDf8gWkD3Ni7NJ
- добавляем комментарий "1" - все ок, отрабатывает pj_comments
- добавляет ответ "2" - все ок, отрабатывает pj_comment_....
- добавляет ответ "3" - все ок, отрабатывает pj_comment_....
- добавляем комментарий "4" - все ок, отрабатывает pj_comments
и вот тут ломается старая форма с комментарием "1" - добавляет ответ "5" - видим в дебаге что летит два запроса "add?doc..." один из них canceled ... в итоге на сервер прилетает 2 запроса и вставляется два комментария
- новый комментарий "4" работает отлично, проверяем:
добавляет ответ "6" - все ок, отрабатывает pj_comment_.... - добавляет ответ "7" - все ок, отрабатывает pj_comment_....
- еще раз смотрим на комментарий "1" добавляем там ответ
добавляет ответ "8" - видим в дебаге что летит два запроса "add?doc..." один из них canceled ... в итоге на сервер прилетает 2 запроса и вставляется два комментария