ajax跨域请求问题的五种解决方案
方案一: 使用跨域资源共享代理(corsproxy)
方式一: 安装node.js客户端
方式二: 在要访问的真实路径前加上www.corsproxy.com
即通过代理的方式来实现跨域访问, 但是不适合高并发和高可用的应用情景
方案二: 使用jsonp
原理: ajax不能跨域请求但是JavaScript可以跨域访问, 因此可以把要返回的json格式的数据包装到js函数中, 然后在页面中定义该函数即可显示
实现: 在ajax的请求中将dataType定义为"jsonp"
方案三: 使用XmlHttpRequest
原理: 其实XmlHttpRequest是ajax的底层实现
实现:
首先,新建一个XMLHttpRequest的实例。
var xhr = new XMLHttpRequest();
然后,向远程主机发出一个HTTP请求。
xhr.open('GET', 'example.php');
xhr.send();
接着,就等待远程主机做出回应。这时需要监控XMLHttpRequest对象的状态变化,指定回调函数。
xhr.onreadystatechange = function(){
if ( xhr.readyState == 4 && xhr.status == 200 ) {
alert( xhr.responseText );
} else {
alert( xhr.statusText );
}
};
方案四: 使用httpclient
httpclient是一个可以接收和发送http请求的工具包, 里面的doGet和doPost可以满足我们常见的需求, 同时还可以选择带参数或者不带参数
方案五:使用阿里巴巴的Dubbo分布式服务框架
dubbo是分布式服务框架, 阿里巴巴soa服务化治理方案的核心框架(现已停止更新)
该框架采用生产者--消费者模型
执行流程:
1、在服务容器加载的时候, 运行服务的生产者
2、服务生产者在启动的时候,向简易注册中心注册自己能提供的服务
3、消费者在启动的时候,向注册中心订阅自己需要的服务
4、注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者
5、服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用
6、服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心
备注:
简易注册中心一般使用zookeeper(当然,这里使用有点大材小用)