*近期在开发过程中,由于两个项目之间需要通信,使用了ajax,发现普通的ajax跨域完成不了,查询资料得知:由于同源策略,ajax跨域被禁止,解释截图如下
经过Google得到了初步的解决方法:使用jsonp.简单解释一下jsonp的原理:
JSONP(JSONP - JSON with Padding是JSON的一种“使用模式”),利用script标签的src属性(浏览器允许script标签跨域),通过动态创建一个script标签,指定src属性为跨域的api,那么html会把返回的字符创当作javascript代码来进行解析,如果我们在返回的字符串中使用自定义函数形式包装起来,然后在html中调用自定义函数,即可拿到返回的字符串
下面贴入简短的demo
前端ajax:
function crossDomain(){ $.ajax({ method:'get', dataType:'jsonp', jsonp:'cb', url:'http://localhost:8081/excms/nldoRunT.action?handler=consult.doCross' }); } function cb(msg){ console.log(msg); alert(msg); }
后台就像ajax一样返回字符串即可,但是对字符串有点小小的要求:
例如上面js中回调函数是cb(msg),所以后台返回的字符串格式为"cb(xxxxx)",要使用cb()将你要返回的数据包裹起来即可.
请注意:由于jsonp方法使用的是script机制,所以jsonp只能发送get请求,
解决post请求的跨域问题:在服务器处理方法中加上一行代码
response.setHeader("Access-Control-Allow-Origin", "*");
其中 * 可以设置自己允许地址.