当前位置: 首页 > news >正文

javascript 解决跨越问题

在开发过程中, 跨越的问题, 或多或少总会遇到...那么该如何解决呢?
因为相对来说还是比较常用的, 为了避免下次使用的时候, 不用再一顿百度....就记录一下吧...

导致跨越问题的原因

因为发送 ajax 请求必须遵循 同源策略, 所以就会出现跨越的问题
同源策略就是: 域名 协议 端口 都必须相同

解决跨越的方法

  • jsonp: 可以用原生js, 也可以使用第三方库(如: jQuery)
  • cors: 在服务端设置指定的响应头
  • nginx proxy: nginx 代理

原生JavaScript方式:

如果不行就请 设置响应头来解决跨域

// client
var script = document.createElement("script");
script.type = "text/javascript";
script.src = "http://localhost/test/index.php?callback=jsonpCallback";
document.head.appendChild(script);
function jsonpCallback(data) {
    console.log(data);
}
// server
$json = json_encode(['name'=>'alex']);
echo "{$_GET['callback']}({$json})"; // jsonpCallback({name:'alex'});

此种方式,必须传递在请求参数中设置一个回调函数名, 然后在php端,用这个方法名包裹需要传递的数据

使用 jQuery 提供的 $.getJSON 方法

$.getJSON("http://localhost/test/index.php?callback=jsonpCallback", function (data) {
    console.log(data);
});

这种方式:回调方法名参数是可选的,默认就是 $.getJSON 中的第二个参数(闭包)

使用 jQuery 提供的 $.ajax 方法

$.ajax({
    url: "http://localhost/test/index.php",
    dataType: "jsonp",
    jsonp: "callback", // 指定回调方法名的key
    type: "get",
    data: {},
    success: function (data) {
        console.log(data);  // 默认是以success方法作为回调方法
    },
    error: function() {
        console.log("request error");
    }
});

此种方式, 默认是以 success 方法作为回调

注意点: JSONP 只能发送 get 类型的请求, 就算在第三中方式中指定 type: "post" 但是还是会自动转换为get 类型的请求

转载于:https://www.cnblogs.com/liaohui5/p/10581592.html

相关文章:

  • 基于axios的vue插件,让http请求更简单
  • 解决大并发的问题
  • 关于bootstrap框架美化的实例教程(python)
  • 如何使用Windows Library文件进行持久化
  • HTNL5列表,表格,音频,视频,iframe内联框架
  • forEach,for...of,map与asycn/await
  • Synchronized 关键字使用、底层原理、JDK1.6 之后的底层优化以及 和ReenTrantLock 的对比...
  • jchdl - GSL实例 - DFlipFlop(D触发器)
  • webgl滤镜--会呼吸的痛
  • 区块链入门教程btcpool矿池源码分析环境搭建
  • 镁客网每周硬科技领域投融资汇总(10.21-10.27),AI芯片创企Syntiant获英特尔等头部企业投资...
  • zabbix介绍
  • 如何做需求分析
  • Netty Channel源码分析
  • VPC配置案例
  • 「前端早读君006」移动开发必备:那些玩转H5的小技巧
  • 【个人向】《HTTP图解》阅后小结
  • Android交互
  • flutter的key在widget list的作用以及必要性
  • Java比较器对数组,集合排序
  • MYSQL 的 IF 函数
  • PaddlePaddle-GitHub的正确打开姿势
  • PHP那些事儿
  • SegmentFault 技术周刊 Vol.27 - Git 学习宝典:程序员走江湖必备
  • spring security oauth2 password授权模式
  • 包装类对象
  • 和 || 运算
  • 理清楚Vue的结构
  • 普通函数和构造函数的区别
  • 浅谈Golang中select的用法
  • 入门级的git使用指北
  • 微信公众号开发小记——5.python微信红包
  • 2017年360最后一道编程题
  • ​软考-高级-信息系统项目管理师教程 第四版【第14章-项目沟通管理-思维导图】​
  • (52)只出现一次的数字III
  • (C语言)strcpy与strcpy详解,与模拟实现
  • (非本人原创)我们工作到底是为了什么?​——HP大中华区总裁孙振耀退休感言(r4笔记第60天)...
  • (附源码)springboot家庭装修管理系统 毕业设计 613205
  • (附源码)ssm航空客运订票系统 毕业设计 141612
  • (十六)串口UART
  • (十三)Java springcloud B2B2C o2o多用户商城 springcloud架构 - SSO单点登录之OAuth2.0 根据token获取用户信息(4)...
  • (一)基于IDEA的JAVA基础10
  • (转)人的集合论——移山之道
  • .dwp和.webpart的区别
  • .halo勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET CLR Hosting 简介
  • .NET Core日志内容详解,详解不同日志级别的区别和有关日志记录的实用工具和第三方库详解与示例
  • .NET HttpWebRequest、WebClient、HttpClient
  • .Net Redis的秒杀Dome和异步执行
  • .Net Winform开发笔记(一)
  • .net 验证控件和javaScript的冲突问题
  • .NET/C# 利用 Walterlv.WeakEvents 高性能地中转一个自定义的弱事件(可让任意 CLR 事件成为弱事件)
  • .Net7 环境安装配置
  • .NET中 MVC 工厂模式浅析
  • .stream().map与.stream().flatMap的使用