Рубрики
Uncategorized

Ошибка и неправильный дизайн ThinkPHP 3.2.3

Автор оригинала: David Wong.

ThinkPHP 3.2.3 ajax _return это Хук Есть логические ошибки Вот исходный код:

protected function ajaxReturn($data,$type='',$json_option=0) {
        if(empty($type)) $type  =   C('DEFAULT_AJAX_RETURN');
        switch (strtoupper($type)){
            case 'JSON' :
                //Return JSON data format to client containing status information
                header('Content-Type:application/json; charset=utf-8');
                exit(json_encode($data,$json_option));
            case 'XML'  :
                //Return data in XML format
                header('Content-Type:text/xml; charset=utf-8');
                exit(xml_encode($data));
            case 'JSONP':
                //Return JSON data format to client containing status information
                header('Content-Type:application/json; charset=utf-8');
                $handler  =   isset($_GET[C('VAR_JSONP_HANDLER')]) ? $_GET[C('VAR_JSONP_HANDLER')] : C('DEFAULT_JSONP_HANDLER');
                exit($handler.'('.json_encode($data,$json_option).');');  
            case 'EVAL' :
                //Return the executable JS script
                header('Content-Type:text/html; charset=utf-8');
                exit($data);            
            default     :
                //Used to extend other return format data
                Hook::listen('ajax_return',$data);
        }
    }

среди C('DEFAULT_AJAX_RETURN') Полученная конфигурация по умолчанию json 。 Очевидно Хук::прослушивание('ajax_return',$data) Местоположение определяет, что оно не будет вызываться обычно. Измените ли вы его на xmljsonp Или eval

Поэтому, чтобы сделать этот Крюк Эффективным, только DEFAULT_AJAX_RETURN Измените эту конфигурацию на jsonxmljsonpeval Любую строку, отличную от… Как будто я изменил его на 'DEFAULT_AJAX_RETURN' => 'крюк'

Затем создайте файл: /Application/Admin/Conf/теги. php

 array('Admin\Behaviors\ajaxBehavior'),
);

Воссоздать файл: /Application/Admin/Behaviors/ajaxBehavior.class.php

Моя цель состоит в том, чтобы: Контроллер Внутренний вызов $this-> ошибка ("tmdphp") Код состояния HTTP ответа изменяется на 500. Чтобы клиент мог правильно выполнить jQuery.ajax Из ошибки Обратного вызова.

На самом деле, это еще одна ошибка, Подумайте\Controller::ошибка Должен ли канал реагировать на неверный код состояния HTTP?

Но, учитывая средний уровень команды, использование ThinkPHP Разработка по-прежнему не является лучшим вариантом.

Я пойду на GitHub, чтобы отправить PR, чтобы узнать, будет ли он принят…