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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 如何快速辨识四位数字贴片电阻阻值[通俗易懂]

    如何快速辨识四位数字贴片电阻阻值[通俗易懂]如何快速辨识四位数字贴片电阻阻值最后一位是0,直接读前三位,单位是Ω。例如:4750475Ω最后一位是1,在第一位后面加小数点,单位是kΩ。例如:47514.75kΩ最后一位是2,在第二位后面加小数点,单位是kΩ。例如:475247.5kΩ…

    2022年8月21日
    3
  • OpenSSL Heartbleed检测工具[通俗易懂]

    OpenSSL Heartbleed检测工具[通俗易懂]OpenSSLHeartbleed检测工具ssltest.py

    2022年7月15日
    14
  • pycharm运行tkinter结果窗口_pycharm运行py文件

    pycharm运行tkinter结果窗口_pycharm运行py文件对于3.x版本中运行thinter问题1:ModuleNotFoundError:Nomodulenamed‘Tkinter’引入的模块没有这个Tkinter这个名字出现的问题2:AttributeError:module‘tkinter’hasnoattribute‘TK’问题原因:调用的属性书写不正确正确的书写importthinter#都是小写的T…

    2022年8月27日
    2
  • Android视图与布局整理

    Android视图与布局整理

    2021年9月30日
    29
  • JSP程序设计习题4-3.6[通俗易懂]

    JSP程序设计习题4-3.6[通俗易懂]3、编写两个JSP页面inputString.jsp和computer.jsp,用户可以使用inputString.jsp提供的表单输入一个字符串,并停交给computer.jsp页面,该页面通过内置对象获取inputString.jsp页面提交的字符串,并且是该字符串的长度。inputString.jsp代码如下:<%@pagelanguage=”java”contentType…

    2022年6月17日
    27
  • 在 Word 中插入域代码并设置域代码的格式(转)「建议收藏」

    在 Word 中插入域代码并设置域代码的格式(转)「建议收藏」MicrosoftOfficeWord中的域用作文档中可能会改变的数据的占位符,并用于在邮件合并文档中创建套用信函和标签。这些种类的域也称为域代码,它们不同于那些用于输入信息的域类型,如在表单上。有关向文档中添加表单域的信息,请参阅创建打印表单、创建用户在Word中填写的表单或在Word中制作核对清单使用特定命令时(如插入页码时、插入封面等文档构建基块时或创建目录时),…

    2022年5月1日
    944

发表回复

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

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