Nach meinem Ajax-Request wird nur das JSON-Response-Objekt ausgeben.
Ansonsten funktioniert alles.
Wenn ich am Ende der Methode 'commentViaAjaxAction' einen Breakpoint setze, sehe ich das die Ergebnisseite korrekt geladen wird. Und erst wenn der Breakpoint komplett abgearbeite ist, wird plötzlich das JSON-Objekt ausgegeben.
Hier mal mein Code:
setup.ts
... ajax = PAGE ajax { typeNum = 99 config { disableAllHeaderCode = 1 additionalHeaders = Content-type:application/json admPanel = 0 } 10 < tt_content.list.20.simpleblog_bloglisting } ...
Die commentViaAjaxAction() des PostController
/** * @param Post $post * @param Comment|null $comment */ public function commentViaAjaxAction(Post $post, Comment $comment = null) { if ($comment->getComment() == '') { return false; } $comment->setCommentdate(new \DateTime()); $post->addComment($comment); $this->postRepository->update($post); $this->objectManager->get('TYPO3\\CMS\\Extbase\\Persistence\\Generic\\PersistenceManager')->persistAll(); $comments = $post->getComments(); foreach ($comments as $comment) { $json[$comment->getUid()] = [ 'comment' => $comment->getComment(), 'commentdate' => $comment->getCommentdate() ]; } }
Und die ajax.js
$().ready(function() { $('#commentsubmit').on('click', function() { var ajaxUrl = '<f:uri.action action="commentViaAjax" controller="Post" pageType="99" arguments="{post:post}"/>'; var form = $('#commentform'); $.ajax({ url: ajaxUrl, type: 'POST', data: form.serialize(), success: function(response) { var items = []; $.each(response, function(key, val) { items.push('<li class="list-group-item">' + val.comment + ' <span class="text-muted">(' + val.commentdate + ')</span></li>'); }); $('#comments').html(items.reverse().join('')); $('#commentfield').val(); return false; } }); }); });