| <?php |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| namespace think\response; |
|
|
| use think\Request; |
| use think\Response; |
|
|
| class Jsonp extends Response |
| { |
| |
| protected $options = [ |
| 'var_jsonp_handler' => 'callback', |
| 'default_jsonp_handler' => 'jsonpReturn', |
| 'json_encode_param' => JSON_UNESCAPED_UNICODE, |
| ]; |
|
|
| protected $contentType = 'application/javascript'; |
|
|
| |
| |
| |
| |
| |
| |
| |
| protected function output($data) |
| { |
| try { |
| |
| $var_jsonp_handler = Request::instance()->param($this->options['var_jsonp_handler'], ""); |
| $handler = !empty($var_jsonp_handler) ? $var_jsonp_handler : $this->options['default_jsonp_handler']; |
|
|
| $data = json_encode($data, $this->options['json_encode_param']); |
|
|
| if ($data === false) { |
| throw new \InvalidArgumentException(json_last_error_msg()); |
| } |
|
|
| $data = $handler . '(' . $data . ');'; |
| return $data; |
| } catch (\Exception $e) { |
| if ($e->getPrevious()) { |
| throw $e->getPrevious(); |
| } |
| throw $e; |
| } |
| } |
|
|
| } |
|
|