ThinkPHP 5 AJAX跨域请求头设置实现过程解析


Posted in PHP onOctober 28, 2020

最近用thinkphp做项目,在测试环境时,存在接口的测试问题。在tp官网也没能找到相关的解决方法。自已看了一下源码,有如下的解决方案。

在项目目录下面,创建common/behavior/CronRun.php文件,文件内容如下:

<?php
/**
 * Created by PhpStorm.
 * User: LiuYang
 * Date: 2017/3/9
 * Time: 19:37
 */

namespace app\common\behavior;

use think\Exception;
use think\Response;

class CronRun
{
  public function run(&$dispatch){
    $host_name = isset($_SERVER['HTTP_ORIGIN']) ? $_SERVER['HTTP_ORIGIN'] : "*";
    $headers = [
      "Access-Control-Allow-Origin" => $host_name,
      "Access-Control-Allow-Credentials" => 'true',
      "Access-Control-Allow-Headers" => "x-token,x-uid,x-token-check,x-requested-with,content-type,Host"
    ];
    if($dispatch instanceof Response) {
      $dispatch->header($headers);
    } else if($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
      $dispatch['type'] = 'response';
      $response = new Response('', 200, $headers);
      $dispatch['response'] = $response;
    }
  }
}

接着在项目中(tags.php)配置行为动作,如下:

<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006~2016 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: liu21st <liu21st@gmail.com>
// +----------------------------------------------------------------------

// 应用行为扩展定义文件
return [
  // 应用初始化
  'app_init'   => [],
  // 应用开始
  'app_begin'  => [
    'app\\common\\behavior\\CronRun'
  ],
  // 模块初始化
  'module_init' => [],
  // 操作开始执行
  'action_begin' => [],
  // 视图内容过滤
  'view_filter' => [],
  // 日志写入
  'log_write'  => [],
  // 应用结束
  'app_end'   => [
    'app\\common\\behavior\\CronRun'
  ],
];

ok,以上几步就解决跨域请求问题。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
帖几个PHP的无限分类实现想法~
Jan 02 PHP
个人站长制做网页常用的php代码
Mar 03 PHP
Zend Studio 无法启动的问题解决方法
Dec 04 PHP
Laravel框架数据库CURD操作、连贯操作总结
Sep 03 PHP
PHP仿微信发红包领红包效果
Oct 30 PHP
Laravel框架实现redis集群的方法分析
Sep 14 PHP
PHP实现的贪婪算法实例
Oct 17 PHP
详细解读php的命名空间(一)
Feb 21 PHP
PHP7中I/O模型内核剖析详解
Apr 14 PHP
mac pecl 安装php7.1扩展教程
Oct 17 PHP
laravel5.1 ajax post 传值_token示例
Oct 24 PHP
phpstudy2020搭建站点的实现示例
Oct 30 PHP
基于PHP实现邮箱验证激活过程详解
Oct 28 #PHP
THINKPHP5分页数据对象处理过程解析
Oct 28 #PHP
Laravel 自动转换长整型雪花 ID 为字符串的实现
Oct 27 #PHP
Laravel配合jwt使用的方法实例
Oct 25 #PHP
数据结构之利用PHP实现二分搜索树
Oct 25 #PHP
如何运行/调试你的PHP代码
Oct 23 #PHP
php redis setnx分布式锁简单原理解析
Oct 23 #PHP
You might like
ThinkPHP中U方法的使用浅析
2014/06/13 PHP
[原创]php常用字符串输出方法分析(echo,print,printf及sprintf)
2016/07/09 PHP
smarty循环嵌套用法示例分析
2016/07/19 PHP
jsonp原理及使用
2013/10/28 Javascript
jQuery动态改变图片显示大小(修改版)的实现思路及代码
2013/12/24 Javascript
jquery实现鼠标经过显示下划线的渐变下拉菜单效果代码
2015/08/24 Javascript
vue.js指令v-model实现方法
2016/12/05 Javascript
js select下拉联动 更具级联性!
2020/04/17 Javascript
微信小程序实战之登录页面制作(5)
2020/03/30 Javascript
详解Vuex管理登录状态
2017/11/13 Javascript
vue+iview写个弹框的示例代码
2017/12/05 Javascript
Vue.js实现备忘录功能
2019/06/26 Javascript
基于Vue的商品主图放大镜方案详解
2019/09/19 Javascript
js prototype深入理解及应用实例分析
2019/11/25 Javascript
[01:14]TI珍贵瞬间系列(六):冠军
2020/08/30 DOTA
Python学习笔记之常用函数及说明
2014/05/23 Python
Python中用Descriptor实现类级属性(Property)详解
2014/09/18 Python
python多线程用法实例详解
2015/01/15 Python
简单介绍Python中利用生成器实现的并发编程
2015/05/04 Python
MySQL适配器PyMySQL详解
2017/09/20 Python
Python设计模式之代理模式简单示例
2018/01/09 Python
Python温度转换实例分析
2018/01/17 Python
python3.4.3下逐行读入txt文本并去重的方法
2018/04/29 Python
Python何时应该使用Lambda函数
2019/07/02 Python
django 消息框架 message使用详解
2019/07/22 Python
pycharm设置当前工作目录的操作(working directory)
2020/02/14 Python
canvas实现高阶贝塞尔曲线(N阶贝塞尔曲线生成器)
2018/01/10 HTML / CSS
加拿大著名时装品牌:SOIA & KYO
2016/08/23 全球购物
泰国最新活动和优惠:Megatix
2020/05/07 全球购物
先进教师个人事迹材料
2014/12/15 职场文书
关于迟到的检讨书
2015/05/06 职场文书
2016年教师师德师风心得体会
2016/01/12 职场文书
干货:如何写好观后感 !
2019/05/21 职场文书
pandas 操作 Excel操作总结
2021/03/31 Python
Vue通过懒加载提升页面响应速度
2021/05/10 Vue.js
在Python 中将类对象序列化为JSON
2022/04/06 Python