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) Местоположение определяет, что оно не будет вызываться обычно. Измените ли вы его на xml 、 jsonp Или eval 。
Поэтому, чтобы сделать этот Крюк Эффективным, только DEFAULT_AJAX_RETURN Измените эту конфигурацию на json 、 xml 、 jsonp 、 eval Любую строку, отличную от… Как будто я изменил его на '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, чтобы узнать, будет ли он принят…