标签:
众所周知,ajax是不允许跨域访问的,但是有的时候我们又需要用到ajax跨域。
其实ajax跨域区分是很严格的,例如同一个服务器,就算端口不一样这也算是跨域。
解决ajax跨域有三个方法:
1.设置响应头。设置在允许跨域的服务器。setHeader 每一个代码都需要设置。
2.设置代理。通过代理实现跨域。
3.JSONP JSON with padding 用script包裹 只能用get方法提交,不是真正的ajax方法。通过创建script方法跨域,返回一段可以执行的JS代码。
/*当前网址是localhost:3000*/ js代码 $.ajax({ type:"get", url:"http://localhost:3000/showAll",/*url写异域的请求地址*/ dataType:"jsonp",/*加上datatype*/ jsonpCallback:"cb",/*设置一个回调函数,名字随便取,和下面的函数里的名字相同就行*/ success:function(){ 。。。 } }); /*而在异域服务器上,*/ app.js app.get(‘/showAll‘,students.showAll);/*这和不跨域的写法相同*/ /*在异域服务器的showAll函数里,*/ var db = require("./database"); exports.showAll = function(req,res){ /**设置响应头允许ajax跨域访问**/ res.setHeader("Access-Control-Allow-Origin","*"); /*星号表示所有的异域请求都可以接受,*/ res.setHeader("Access-Control-Allow-Methods","GET,POST"); var con = db.getCon(); con.query("select * from t_students",function(error,rows){ if(error){ console.log("数据库出错:"+error); }else{ /*注意这里,返回的就是jsonP的回调函数名+数据了*/ res.send("cb("+JSON.stringify(r)+")"); } }); }
标签:
原文地址:http://www.cnblogs.com/dh55/p/5597213.html