ajax跨域问题(三种解决方案)

ajax跨域问题(三种解决方案)

为什么会出现跨域

    跨域问题来源于JavaScript的同源策略,即只有 协议+主机名+端口号 (如存在)相同,则允许相互访问。也就是说JavaScript只能访问和操作自己域下的资源,不能访问和操作其他域下的资源。跨域问题是针对JS和ajax的,html本身没有跨域问题,比如a标签、script标签、甚至form标签(可以直接跨域发送数据并接收数据)等

如何解决跨域问题

    JSONP
      JSONP是JSON with Padding的略称。它是一个非官方的协议,它允许在服务器端集成Script tags返回至客户端,通过javascript callback的形式实现跨域访问(这仅仅是JSONP简单的实现形式)。关于jsonp的使用方式,可以参考http://blog.csdn.net/alen1985/article/details/6365394,优缺点可以参考http://blog.csdn.net/z69183787/article/details/19191385  
    添加响应头,允许跨域
      addHeader(‘Access-Control-Allow-Origin:*’);//允许所有来源访问
      addHeader(‘Access-Control-Allow-Method:POST,GET’);//允许访问的方式
    代理的方式
    服务器A的test01.html页面想访问服务器B的后台action,返回“test”字符串,此时就出现跨域请求,浏览器控制台会出现报错提示,由于跨域是浏览器的同源策略造成的,对于服务器后台不存在该问题,可以在服务器A中添加一个代理action,在该action中完成对服务器B中action数据的请求,然后在返回到test01.html页面。

Demo1(添加允许跨域请求的响应头)

    html页面

    Web后台

    按照上面的访问,由于127.0.0.1:8080和localhost:8081的域和端口不同,所以同样会出现跨域问题。

现在用添加响应头的方式

Demo2(jsonp的callback方式)

这里演示的是jquery的ajax,后台采用的是webservice接口形式

注意此时的dataType为jsonp格式,看看后台的接收

我们返回的其实就是一个函数的调用文本,这里注意,callback的名称,由于前台没有指定callback函数,所以这里自动生成了,如果想自定义回调函数名称如下操作,添加一行请求参数

这样后台的回调函数名就变成了mytest

浏览器发出的请求格式和响应数据如下,其实就是返回函数的调用,而需要返回的数据则以函数参数值的形式填入

此时控制台就能够获取到“hello world”

推荐参考资料:
http://www.cnblogs.com/chopper/archive/2012/03/24/2403945.html
———————
作者:吴渣渣
来源:CSDN
原文:https://blog.csdn.net/u014727260/article/details/72793459
版权声明:本文为博主原创文章,转载请附上博文链接!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/112550.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • java中级项目案例_60个Java练手项目案例,看了让你茅塞顿开~

    java中级项目案例_60个Java练手项目案例,看了让你茅塞顿开~给大家推荐一条由浅入深的JAVA学习路径,首先完成Java基础、JDK、JDBC、正则表达式等基础实验,然后进阶到J2SE和SSH框架学习。最后再通过有趣的练手项目进行巩固。JAVA基础Java编程语言(新版)2.Java进阶之设计模式3.JDK核心API4.MySQL基础课程5.正则表达式基础6.JDBC入门教程J2SE&SSH框架7.Java函数式编…

    2022年7月7日
    29
  • explain如何查看mysql_MySQL Explain详解[通俗易懂]

    explain如何查看mysql_MySQL Explain详解[通俗易懂]在日常工作中,我们会有时会开慢查询去记录一些执行时间比较久的SQL语句,找出这些SQL语句并不意味着完事了,些时我们常常用到explain这个命令来查看一个这些SQL语句的执行计划,查看该SQL语句有没有使用上了索引,有没有做全表扫描,这都可以通过explain命令来查看。所以我们深入了解MySQL的基于开销的优化器,还可以获得很多可能被优化器考虑到的访问策略的细节,以及当运行SQL语句时哪种策略…

    2022年10月18日
    2
  • android调用js方法

    android调用js方法

    2021年9月30日
    42
  • 小程序开发毕业设计_基于小程序的毕业设计

    小程序开发毕业设计_基于小程序的毕业设计基于微信小程序的培训机构系统前言:该系统作为本科毕业设计,可能还有很多的不足。只是当时做这个系统的时候,由于需要使用java语言作为后端实现与微信小程序界面数据交互,看遍网上很多的案例基本后台都是php语言用于编写接口,几乎没找到过java作为后台语言的案例。写这篇博客只是为了帮助需要后台使用java语言来实现的朋友。一、项目介绍微信小程序端:小程序端管理员实现对信息模块的管理,包含课程…

    2025年12月15日
    3
  • linux怎样配置yum源_yum配置源

    linux怎样配置yum源_yum配置源目录一:配置本地yum源二:配置网络yum源更新源可以获取最新的软件信息,以更新您的系统Redhat7配置源YUM(YellowdogUpdaterModified):yum是Redhat系列系统基于RPM包构建的软件更新机制,可以自动解决rpm包之间的依赖关系,所有软件包由集中的yum软件仓库提供。其理念是使用一个中心仓库(repository)管理一部分甚至一…

    2022年8月13日
    5
  • jsdelivr 缓存刷新

    jsdelivr 缓存刷新前言 上一篇修改了黑幕 但是使用了 jsdelivr 加速的静态资源 所以照常更新下 github 上的资源 但是 github 上查看已经上传成功了 jsdelivr 访问的依然是之前的资源 说白了就是缓存的问题 即使本地浏览器端的缓存已经清理 也会因为 CDN 周围的节点没有同步数据而导致用户端未能及时更新 缓存刷新把原来访问的链接 https cdn jsdelivr net 改为 https purge jsdelivr net 访问资源就会进行刷新 然后页面会返回刷新信息 划水

    2025年9月25日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号