微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在用AJAX跨域请求时遇到的问题

刚刚接触ajax就遇到一个词--跨域。

在我百度了各种资料以后总结了一句话:“只要不是在一个协议、域、名端口下,都属于跨域(127.0.0.1本地也属于跨域)”。

在做ajax请求的时候,请求不到并且浏览器会报错,错误如下:

XMLHttpRequest cannot load http://xxxxxxNo ‘Access-Control-Allow-Origin‘ header is present on the requested resource. Origin ‘http://xxxxxxx‘ is therefore not allowed access.

我在查阅跨域的资料之后,学了两种解决跨域问题的方法

一、设置header头运行ajax跨域

这步前端不需要做什么,正常使用dataType : ‘json‘,和post请求。

只需要后台设置允许跨域。代码如下:

// 指定允许其他域名访问

httpServletResponse.setHeader("Access-Control-Allow-Origin","*");

// 响应类型

httpServletResponse.setHeader("Access-Control-Allow-Methods","POST");

// 响应头设置

httpServletResponse.setHeader("Access-Control-Allow-Headers","x-requested-with,content-type");

Access-Control-Allow-Origin:* 表示允许任何域名跨域访问,由于设置*存在安全隐患,建议将*改成你想允许的域名。

看到一篇文章说只设置Access-Control-Allow-Origin这一个属性也可以允许跨域。

二、允许jsonp跨域

PHP代码

//需要获取的数据

$data = array(‘id‘=>1,‘name‘=>‘ityangs‘);

//设置参数名

$callback = $_GET[‘callback‘];

//输出

echo $callback.‘(‘.json_encode($data).‘)‘;

//退出

exit;

 

输入的结果是:‘users({‘id‘: 1,‘name‘: ‘ityangs‘})‘

前端代码

$.ajax({

    type : "get",//jsonp的本质是利用script标签的src属性进行跨域请求,只能用于get请求。

    url : "ajax.PHP",

    dataType : "jsonp",

    jsonp: "callback",//传递给请求处理程序或页面的,用以获得jsonp回调函数名的参数名(认为:callback)

    jsonpCallback:"success_jsonpCallback",//自定义的jsonp回调函数名称认为jQuery自动生成随机函数

    success : function(json){

        alert(‘success‘);

    },

    error:function(){

        alert(‘fail‘);

    }

});

由于个人见识有限,又是个渣前端,如有差错,请多多见谅,并提出修改办法,勿喷。

分享图片

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐