由于js同源策略的影响,当在某一域名下请求其他域名,或者同一域名,不同端口下的url时,就会变成不被允许的跨域请求。
那这个时候通常怎么解决呢,对此菜鸟光头我稍作了整理:
1.JavaScript
   在原生js(没有jQuery和ajax支持)的情况下,通常客户端代码是这样的(我假设是在localhost:8080的端口下的http://localhost:8080/webs/i.mediapower.mobi/wutao/index.html页面的body标签下面加入以下代码):

<script>var xhr = new XMLHttpRequest();xhr.open("get", "http://i2.mediapower.mobi/adpower/vm/Bora/js/test.js", true);xhr.onreadystatechange = function() {if (xhr.readyState == 4 && xhr.status == 200) {console.log(xhr.responseText);}};xhr.send(null);
</script>

保存,浏览器打开http://localhost:8080/webs/i.mediapower.mobi/wutao/index.html,并且打开console控制台:

浏览器很无情的给你弹出一个同源限制的错误,意思就是你无法跨域请求url的数据。
那么,我先采取第一种策略,运用html中的script标签,插入js脚本:
(1)通过script标签引用,写死你需要的src的url地址,比如:

<script>
var callbackfunction = function(data) {console.log('我是跨域请求来的数据-->' + data.name);
};
</script>
<script src="http://i2.mediapower.mobi/adpower/vm/Bora/js/test.js?callback=callbackfunction"></script>

这里我定义一个callbackfunction的函数,然后用script标签的src属性跨域请求数据,那么,test.js的内容经过约定,需要写成这样:
callbackfunction({"name":"wwwwwwwwwwww"});
保存,打开index.html并刷新:

(2)你也可以动态的加入script标签,让html解析的时候,动态的加载script脚本,并请求远端数据:

<script>
var callbackfunction = function(data) {console.log('我是跨域请求来的数据-->' + data.name);
};
var script = document.createElement('script'),body = document.getElementsByTagName('body');script.src = 'http://i2.mediapower.mobi/adpower/vm/Bora/js/test.js?callback=callbackfunction';
body[0].appendChild(script);
</script>

结果和上面一样。

2.jQuery中的$.ajax()

设想,当你想要使用jQuery请求跨域数据的时候,比如(还是刚才的index.html):

<script src="js/jquery-1.11.3.js"></script>
<script>
$(function(){$.get('http://i2.mediapower.mobi/adpower/vm/Bora/js/test.js',function(data){console.log(data);})
})
</script>

浏览器还是无情的报错,因为你这个url是不同的域名下的。

那么既然jQuery封装了ajax方法,我们为何不用,人家封装好了,你不用,岂不是找罪受么,代码如下:

<script src="js/jquery-1.11.3.js"></script>
<script>
$(function(){$.ajax({async: false,type: "GET",dataType: 'jsonp',jsonp: 'callback',jsonpCallback: 'callbackfunction',url: "http://i2.mediapower.mobi/adpower/vm/Bora/js/test.js",data: "",timeout: 3000,contentType: "application/json;utf-8",success: function(msg) {console.log(msg);}});
})
</script>

当你作了这么多挑逗工作之后,浏览器很爽快的给出了反应,表示它很爽,返回给了你一个对象,里面是远端不同域名下test.js中的数据。
3.postMessage+iframe

postMessage是HTML5中新增加的功能,比如我在本地域名下,http://192.168.1.152:8080/webs/i.mediapower.mobi/wutao/testa.html中的testa.html中:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>testa</title>
</head>
<script>
window.onload = function() {document.getElementById('ifr').contentWindow.postMessage('我是要经过传递的数据', 'http://i2.mediapower.mobi/adpower/vm/Bora/testb.html');
};
</script>
<body><iframe id="ifr" src="http://i2.mediapower.mobi/adpower/vm/Bora/testb.html"></iframe>
</body>
</html>

此时,我远端的testb.html里面的内容应该是这样:

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><title>testb</title>
</head>
<script>
window.addEventListener('message', function(event) {// 通过origin属性判断消息来源地址if (event.origin === 'http://192.168.1.152:8080') {alert(event.data); }
}, false);
</script>
<body>
123
</body>
</html>

保存代码,打开本地testa.html,访问远端的testb.html

总结了一下,jQuery还是非常的好用的,基本上js能干的事情,jQuery都能非常快速并且高效的完成,当然,原生js也能解决很多事情,而HTML5的新功能也非常强大,这几种方法,我还是首推jQuery。

以上就是为大家分享的3种常用的js跨域请求数据的方法,希望对大家的学习有所帮助。

-->点击查看原文<--

转载于:https://www.cnblogs.com/spx1101/p/6524228.html

js跨域请求数据的3种常用的方法相关推荐

  1. js跨域请求方式 ---- JSONP原理解析

    这篇文章主要介绍了js跨域请求的5中解决方式的相关资料,需要的朋友可以参考下 跨域请求数据解决方案主要有如下解决方法: 1 2 3 4 5 JSONP方式 表单POST方式 服务器代理 Html5的X ...

  2. $.ajax跨域请求数据的解决方案

    最近一直在搞公众号前台开发,遇到了ajax跨域请求的问题,像地区的省-市-县三级联动.汽车品牌-车系-车款的三级联动查询等都需要调用外部接口(其他工程项目的接口)完成.下面就分享一下个人解决跨域请求的 ...

  3. JS 跨域问题常见的五种解决方式

    JS 跨域问题常见的五种解决方式 一.什么是跨域? 要理解跨域问题,就先理解好概念.跨域问题是由于javascript语言安全限制中的同源策略造成的. 简单来说,同源策略是指一段脚本只能读取来自同一来 ...

  4. AJAX跨域请求数据原理与案例

    1.如何通过AJAX跨域请求数据 AJAX通过jsonp来实现跨域请求数据,通过设置dataType(jquery)为jsonp即可. 2.AJAX如何通过jsonp实现跨域(来源于其他网站资料) J ...

  5. Node.js跨域请求解决方案

    Node.js跨域请求解决方案 一.缘由: 初到公司,老大让去解决之前项目客户提出的一个小问题,对某一模块进行访问验证,之前的项目是PHP做的,对此不了解,因此不打算先学习PHP再去解决问题,考虑到客 ...

  6. JS跨域请求解决方案-CORS

    文章目录 JS跨域请求解决方案-CORS 1.JS跨域请求 测试JavaScript的跨域请求(失败) 2. 跨域解决方案CORS 普通实现方法 springMVC的跨域请求注解 3.分布式Id解决方 ...

  7. ajax 跨域请求数据,JQuery Ajax执行跨域请求数据的解决方案

    JQuery Ajax执行跨域请求数据的解决方案 今天前端因为需要ajax调用两个不同的项目,请求域不一样,所以涉及ajax跨域的问题 ,其实很简单,具体如下 原来的ajax请求如下: $.ajax( ...

  8. Firefox OS, 向jQuery中XMLHttpRequest构造函数中传参,实现跨域请求数据

    为什么80%的码农都做不了架构师?>>>    将以下代码应用于ajax方法调用之前 $.ajaxSettings.xhr = function() {try {return new ...

  9. Node.JS跨域请求配置方案

    今天在用node开发的过程中,再次遇到同源策略的问题: 在客户端调用服务端获取数据时,Chrome 浏览器中报错如下: Access to XMLHttpRequest at 'http://loca ...

  10. Node.js设置CORS跨域请求中多域名白名单的方法

    允许跨域请求,主要就是配置Response响应头中的 Access-Control-Allow-Origin 属性为你允许该接口访问的域名. 最常见的设置是: res.header('Access-C ...

最新文章

  1. cassandra命令
  2. 安装 | Window下Visual Studio VS2015 VS2017 各版本下载地址
  3. python莫比乌斯内接矩形_莫比乌斯反演例题集 ^_^(示例代码)
  4. 怎么配置堡垒机_轻量级堡垒机teleport的使用
  5. IP地址的分类及子网划分
  6. 在本地搭建hyperledger fabric 网络
  7. 针对 xml 数据类型的 XQuery (摘自SQL Server 2005 联机丛书)
  8. windows时间设置
  9. ubuntu安装锐捷客户端
  10. python 柱状图和折线图放在一起_Excel怎样把柱状图和折线图放在一起(超详细)...
  11. 记录一次Stack上关于数学之美的brainstorm
  12. java jtable 单元格合并_JTable合并单元格
  13. html文档成品,HTML成品代码
  14. 软考网络工程师协议和名称---必看
  15. 装配式施工在建筑装修中的应用研究
  16. 抖音如何开直播?直播需要做什么准备?
  17. 【c#系列】PDF进行操作-浏览、分割、合并、插入、删除(1)
  18. Wework创始人再创业,靠美版“自如”估值10亿美金
  19. pam_shells.so
  20. 区块链基础理论模拟试卷五

热门文章

  1. 解决Win7上的连接access数据库的问题
  2. 工厂三兄弟之简单工厂模式(三)
  3. DELPHI学习---简单类型
  4. Asp.net Web控件自定义类属性(经验篇)
  5. python源码中的学习笔记_第4章_列表
  6. 让人深思:句法真的重要吗?邱锡鹏组提出一种基于Aspect的情感分析的强大基线...
  7. 【WWW2021】图结构估计神经网络
  8. NLP基础—3.文本表示
  9. 白板推导系列Pytorch-隐马尔可夫模型-学习问题
  10. 智能运维(AIOps)时代开启,一文帮你快速了解其定义与发展现状