当Ajax提交的请求为跨域的时候会提示错误:
已拦截跨源请求:同源策略禁止读取位于 http://****** 的远程资源。(原因:CORS 头缺少 'Access-Control-Allow-Origin')。
解决方法一:
使用jsonp进行请求
$(document).ready(function () {
$.ajax({
type: "GET",//请求方式:GET
async: false,//是否异步:否
cache: false,//是否缓存:否
timeout: 200,//请求超时响应:200s
url: "http://****",//请求url
data: "",//请求参数
dataType: "jsonp",//数据类型:jsonp
crossDomain: true,//是否跨域:是
jsonp: "callback",//callback或者jsoncallback或者jsonpcallback;传递给请求处理程序或页面的,用以获得jsonp回调函数名的参数名(一般默认为:callback)
jsonpCallback: "callback",//自定义jsonp回调函数名称,可以随意起名,或者根据项目规范命名,默认为jQuery自动生成的随机函数名,也可以写"?",jQuery会自动为你处理数据;若自定义的函数名是js中的function会执行下面函数function
complete: function () {
//hideLoadingMsg(); // 数据获取完成后,需要做的事,此为隐藏读取数据的滚动条。
},
success: function (json) {//请求成功:此处传回来的数据为:my({'msg': 'OK', 'code': 0, 'data': {'appinstall': '2000'}})
},
error: function () {//请求异常:网络断开或者
}
});
但是要注意服务器返回的值需要特定的格式
my({'msg': 'OK', 'code': 0, 'data': {'appinstall': '2000'}})
不然会提示无法解析的错误.
json与jsonp的区别 点击打开链接
方法二:
在服务器端口的返回头中加入 Access-Control-Allow-Origin
$respArray=$this->get('promotion_service')->getcity();
$response = new Response ( json_encode ( $respArray ), 200 );
$response->headers->set ("Access-Control-Allow-Origin","*");//*代表允许所有的请求,可以换为制定的地址
$response->headers->set ( 'Content-Type', 'application/json' );