2015-01-13 3 views
1

Я пытаюсь создать контроллер, который обрабатывает запросы ajax.Typo3 extbase json output

я узнал, что я должен добавить это к моему TS конфигурации:

ajaxCall = PAGE 
ajaxCall { 
    typeNum = 999 
    config.disableAllHeaderCode = 1 
    config.metaCharset = UTF-8 
    xhtml_cleaning = 0 
    admPanel = 0 
    10 = COA 
    10 < tt_content.list.20.registration_userregistration 
} 

И мой контроллер выглядит следующим образом:

/** 
* JSONController 
*/ 
class JSONController extends \TYPO3\CMS\Extbase\Mvc\Controller\ActionController { 

    /** 
    * @var string 
    */ 
    protected $defaultViewObjectName = 'TYPO3\\CMS\\Extbase\\Mvc\\View\\JsonView'; 

    /** 
    * action test 
    * 
    * @return string 
    */ 
    public function testAction() { 
     $this->view->assign('value', "001"); 
    } 
} 

Это работает, я получаю пустую страницу с " 001 ". Но если я посмотрю на источник, есть 4 пустые строки, а «001» - в 5-й строке.

-empty- 
-empty- 
-empty- 
-empty- 
"001" 

Я понятия не имею, почему ...

ответ

3

Хорошо, я получил его ...

Я включил файл с некоторыми функциями имени user.php

/** 
* User service 
* 
* @var \Whmcs\Registration\Service\User 
* @inject 
*/ 
protected $user = NULL; 

В этом файле есть пустые строки после тега?>. Эти пустые строки были проблемой. Я удалил их, и теперь все работает нормально. :)

2

Я не понимаю, почему не вы используете какой-то вид для рендеринга JSON ???

public function testAction() { 
    $data = array('value'=>'001'); 
    return json_encode($data); 
} 

Конечно, вы должны установить Content-type: application/json - где вы предпочитаете - в ваших TS или непосредственно в действии перед возвращением;

Другой ключ: может быть это вызвано tt_content (только guesing), для действий в формате JSON, лучше включать их непосредственно через Bootstrap, первый регистр новый FE плагин в вашем ext_localconf.php:

\TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin(
    'VENDORNAME.' . $_EXTKEY, 
    'JsonDataPlugin', 
    array('JSON' => 'test',), 
    array('JSON' => 'test',) 
); 

И изменить ваши TS:

myAjaxPage = PAGE 
myAjaxPage { 

    typeNum = 999 
    10 = USER 
    10 { 
    userFunc = TYPO3\CMS\Extbase\Core\Bootstrap->run 
    extensionName = Yourextname 
    pluginName = JsonDataPlugin 
    vendorName = VENDORNAME 
    } 

    config { 
    disableAllHeaderCode = 1 
    additionalHeaders = Content-type:application/json 
    xhtml_cleaning = 0 
    admPanel = 0 
    debug = 0 
    no_cache = 1 
    } 

} 

(не забудьте изменить Yourextname и Имя_вендора для собственных, а также очистить кэш системы)

Наконец: Проверьте все ваши файлы и убедитесь, что там нет пустых строк перед <?php и после ?> (лучший вариант, чтобы удалить ?> из каждого файла - и пусть PHP завершить скрипт в конце файла). Также он может быть зафиксирован в источнике TYPO3, как описано в other naswer.

+0

Танки, но я попробовал это уже и имел ту же проблему ... Я не знаю, почему я использую представление для этого, я новый в typo3, если у вас есть лучший способ, скажите мне. :) – Marcel

+0

Отметьте мое изменение для деталей – biesior

+0

Сделал это, но все та же проблема – Marcel