ajax本身是不可以跨域的,
通过产生一个script标签来实现跨域。因为script标签的src属性是没有跨域的限制的。
其实设置了dataType: 'jsonp'后,$.ajax方法就和ajax XmlHttpRequest没什么关系了,取而代之的则是JSONP协议。JSONP是一个非官方的协议,它允许在服务器端集成Script tags返回至客户端,通过javascript callback的形式实现跨域访问。
js代码:
var url = "http://127.0.0.1:8000/test"; $.ajax({ type:'get', url:url, dataType:'jsonp', jsonpCallback:'back', success:function(msg){ console.log(msg); }, error:function(){ alert('访问失败!'); } });
异域服务器端代码:
app.js中:
//跨域测试 app.get('/test',webIndex.tests);
//测试跨域 exports.tests = function(req,res){ /**设置响应头允许ajax跨域访问**/ res.setHeader("Access-Control-Allow-Origin","*"); /*星号表示所有的异域请求都可以接受,*/ res.setHeader("Access-Control-Allow-Methods","GET,POST"); var obj = { b:'111', c:'222' } res.send("back("+JSON.stringify(obj)+")"); }
结果: