前端跨域之html5 XMLHttpRequest Level2

前端代码

var xhr=new XMLHttpRequest();
    xhr.open(‘POST‘,‘http://127.0.0.1:8081/ceshi‘,true);
    xhr.onreadystatechange=function(){
      if(xhr.readyState==4){//响应完毕后
        if(xhr.status==200){//http状态码为200时
            var result=xhr.responseText;//获取ajax请求的文本内容
            console.log(result);
        }
      }
    }
    xhr.setRequestHeader("Content-Type","application/json")
    var a={name:123,data:"sss"};
    var b=JSON.stringify(a);
    xhr.send(b)
    }
//此处有两个坑
//坑1:有些ajax类库中的代码会影响服务器跨域设置
http://www.cnblogs.com/daishuguang/p/3971989.html
//坑2:如果设置Content-Type为application/json那么在服务端需要设置
//res.header("Access-Control-Allow-Headers", "Content-Type");//并且请求会发送两次,因为在跨域的时候,除了contentType为application/x-www-form-urlencoded, multipart/form-data或者text/plain外,都会触发浏览器先发送方法为OPTIONS的请求。比如说,你原来的请求是方法方法POST,如果第一个请求返回的结果Header中的Allow属性并没有POST方法,那么第二个请求是不会发送的,此时浏览器控制台会报错,告诉你POST方法并不被服务器支持。

  服务器代码 此处采用node.js为例

var express = require(‘express‘);
var app = express();
var bodyParser = require(‘body-parser‘);
// var urlencodedParser = bodyParser.urlencoded({ extended: false })

app.all(‘*‘, function(req, res, next) {
    res.header("Access-Control-Allow-Headers", "Content-Type");
    res.header("Access-Control-Allow-Methods","POST,PUT,GET,DELETE,OPTIONS");
    res.header("Access-Control-Allow-Origin", "*");
    res.header("X-Powered-By",‘ 3.2.1‘)
    res.header("Content-Type", "application/json;charset=utf-8");
    next();
});
	app.use(bodyParser.json());
	app.use(bodyParser.urlencoded({extended: false}))
app.get(‘/‘, function (req, res) {
	console.log("你好啊")
   res.send(‘Hello World‘);
})
app.post(‘/ceshi‘,function(req,res){
	console.log(req.body)
	res.send("nihao")
})
var server = app.listen(8081, function () {

  var host = server.address().address
  var port = server.address().port

  console.log("服务器启动成功", host, port)

})

  参考文章http://www.jianshu.com/p/fddd19669ab3

时间: 2024-10-23 03:13:46

前端跨域之html5 XMLHttpRequest Level2的相关文章

html5的postmessage实现js前端跨域访问及调用解决方案

关于跨域访问,使用JSONP的方法,我前面已经demo过了,具体见http://supercharles888.blog.51cto.com/609344/856886,HTML5提供了一个非常强大的API,叫postMessage,它其实就是以前iframe的进化版本,使用起来极其方便,这里举个实验例子: 我们依旧按照与上文相同的设定,假定我们有2个Domain Domain1: http://localhost:8080  它上面有个应用叫HTMLDomain1,并且有个页面叫sender.

前端跨域问题的几种解决方案

前端跨域问题 一:同源策略 1.what's this 所谓同源是指,域名,协议,端口相同.当浏览器运行一个JS脚本时会进行同源检测,如果不同源是不能执行的. 2.源继承 来自about:blank,javascript:和data:URLs中的内容,继承了将其载入的文档所指定的源,因为它们的URL本身未指定任何关于自身源的信息. 3.变更源 变更源可以实现基础域相同的不同页面的跨域问题. 如:a.baidu.com/index.html 通过 iframe 引入 b.baidu.com/ind

前端跨域请求原理及实践

前端跨域请求原理及实践 2017-03-03 前端大全 (点击上方公众号,可快速关注) 作者:高鹏 tingandpeng.com/2016/09/05/前端跨域请求原理及实践/ 如有好文章投稿,请点击 → 这里了解详情 一. 跨域请求的含义 浏览器的同源策略,出于防范跨站脚本的攻击,禁止客户端脚本(如 JavaScript)对不同域的服务进行跨站调用. 一般的,只要网站的 协议名protocol. 主机host. 端口号port 这三个中的任意一个不同,网站间的数据请求与传输便构成了跨域调用.

前端跨域杂谈

1.前端跨域之表单(post) 项目需求,需要跨域向另一台服务器传送大量值,从ajax角度跨域是get方式,基于此,方案采用构造<form>表单,通过action发送到对方服务器,对方服务器需要做一些配合. 发送方post.html <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <meta content="width=device-width,

解决前端跨域请求的几种方式

利用 JSONP 实现跨域调用 说道跨域调用,可能大家首先想到的或者听说过的就是 JSONP 了. 1.1 什么是JSONP JSONP 是 JSON 的一种使用模式,可以解决主流浏览器的跨域数据访问问题.其原理是根据 XmlHttpRequest 对象受到同源策略的影响,而 <script> 标签元素却不受同源策略影响,可以加载跨域服务器上的脚本,网页可以从其他来源动态产生 JSON 资料.用 JSONP 获取的不是 JSON 数据,而是可以直接运行的 JavaScript 语句. 1.2

前端跨域访问

1. JSONP 2. CORS(Cross-origin resource sharing) 2.1 运行模式 2.2 JQuery支持CORS 2.3 与JSONP相比 3. 跨域访问在点评的应用 References 在互联网应用中: 一个页面需要请求多个域名下的web服务端接口 同时一个web服务接口可能会被很多不同域名下的页面请求. 一个web应用如果支持为了支持以上模式而申请多个域名是不合算的,因为域名申请和管理所占用的资源比较大,因此服务端支持跨域就成了一个更合理的解决方案.解决跨

前端跨域的那些事

这一节,我们来讲一讲,前端跨域的那些事,主要分成这样的几部分来讲解, 一.为什么要跨域? 二.常见的几种跨域与使用场景 2.1 JSONP跨域 2.2 iframe跨域 2.3 window.name 跨域 2.4 document.domain 跨域 2.5 cookie跨域 2.6 postMessage跨域 三.总结 一.为什么要跨域 跨域,通常情况下是说在两个不通过的域名下面无法进行正常的通信,或者说是无法获取其他域名下面的数据,这个主要的原因是,浏览器出于安全问题的考虑,采用了同源策略

前端跨域深入理解

p.p1 { margin: 0.0px 0.0px 12.8px 0.0px; line-height: 18.0px; font: 19.2px "PT Sans"; color: #000000 } p.p2 { margin: 0.0px 0.0px 14.4px 0.0px; line-height: 18.0px; font: 14.4px "PT Sans"; color: #000000 } p.p3 { margin: 0.0px 0.0px 12

记一次前端跨域的问题 - 礼锐的博客

浏览器实现对不同源的网址的资源获取的行为.详见维基百科.这篇文章的起因来源于需要向别的部门进行资源请求, 不在同一个域, 资源请求不到, 等了两天还没解决后便通过node的express来代理请求, 解决了这个问题. 定义(WHAT) 什么叫不同源(满足下列条件任意一个) 不同的域名(domain) baidu.com 和 google.com 这样名称不相同的就叫不同 domain 不同的端口 localhost:8000 和 localhost:3000 如果不写端口号, 根据协议有默认值