[!!!][TASK] Do not add JSON to header if type equals "json" 55/22655/6
authorBenjamin Mack <benni@typo3.org>
Sun, 22 Mar 2015 23:44:16 +0000 (00:44 +0100)
committerBenjamin Mack <benni@typo3.org>
Mon, 23 Mar 2015 14:18:17 +0000 (15:18 +0100)
If you choose "json" as contentType in AJAX-Calls the encoded
json-string will be pushed to the HTTP-Header and will be
outputted on the website. But HTTP-Header is not the right
place for huge json-strings.
So this patch lets "json" works like "jsonbody".

Back in the days, JSON data in the X-JSON header
was for prototypeJS usage, which is now not used
anymore for AJAX requests within the core.

Resolves: #50509
Releases: master
Change-Id: I782cdf2817e30f2e5f016fa92edb06f1e8cbd5b2
Reviewed-on: http://review.typo3.org/22655
Reviewed-by: Nicole Cordes <typo3@cordes.co>
Tested-by: Nicole Cordes <typo3@cordes.co>
Reviewed-by: Stefan Neufeind <typo3.neufeind@speedpartner.de>
Reviewed-by: Jan Helke <typo3@helke.de>
Tested-by: Jan Helke <typo3@helke.de>
Reviewed-by: Benjamin Mack <benni@typo3.org>
Tested-by: Benjamin Mack <benni@typo3.org>
typo3/sysext/core/Classes/Http/AjaxRequestHandler.php

index ce55bf6..1bd7bc6 100644 (file)
@@ -239,7 +239,7 @@ class AjaxRequestHandler {
         * in your AJAX options of your AJAX request object in JS
         *
         * the content will be available
-        * - in the second parameter of the onSuccess / onComplete callback (except when contentFormat = 'jsonbody')
+        * - in the second parameter of the onSuccess / onComplete callback
         * - and in the xhr.responseText as a string (except when contentFormat = 'jsonhead')
         * you can evaluate this in JS with xhr.responseText.evalJSON();
         *
@@ -248,9 +248,11 @@ class AjaxRequestHandler {
        protected function renderAsJSON() {
                $content = json_encode($this->content);
                header('Content-type: application/json; charset=utf-8');
-               header('X-JSON: ' . ($this->contentFormat != 'jsonbody' ? $content : TRUE));
                // Bring content in xhr.responseText except when in "json head only" mode
-               if ($this->contentFormat != 'jsonhead') {
+               if ($this->contentFormat === 'jsonhead') {
+                       header('X-JSON: ' . $content);
+               } else {
+                       header('X-JSON: true');
                        echo $content;
                }
        }