码迷,mamicode.com
首页 > 其他好文 > 详细

跨域请求

时间:2014-09-26 19:45:58      阅读:135      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   io   os   使用   java   ar   

XMLHttpRequest cannot loadhttp://localhost/MongoTest/person.php. Origin http://localhost:81 is not allowed by Access-Control-Allow-Origin.

 同源策略导致的跨域请求被拒绝

解决方法:

1.利用<script>标签

 浏览器会阻止ajax请求非同源的内容,但没有限制<script>标签来访问非同源的内容,也没有限制使用动态添加<script>标签,所以可以采用这种方式打破这种限制。

<script type="text/javascript" src="http://localhost:80/MongoTest/person.php" ></script>

动态添加:即创建一个script标签,并且为src赋值,然后通过DOM操作添加到HTML文档中

2.JSONP

JSONP(JSON with Padding)就是服务器端和客户端互相协作以完成跨域请求的一种协议,客户端向服务器端发送请求并附带callback函数,服务器端返回相应的js代码,这个代码就是执行回调函数,参数就是服务器端返回的JSON数据。
客户端在发起跨域请求时,需要制定具体的回调函数,比如这个请求http://localhost:80/MongoTest/person.php?callback=sayHello,callback就是回调函数,服务器端也要通过callback要提取回调函数名,所以具体的这个参数需要客户端和服务器端达成一致,否则不能实现跨域。
用jquery实现jsonp
$.ajax({
    type : "get",
    async:false,
    url : "http://www.xxx.com/ajax.do",
    dataType : "jsonp",
    jsonp: "callbackparam",//服务端用于接收callback调用的function名的参数
    jsonpCallback:"success_jsonpCallback",//callback的function名称
    success : function(json){
        alert(json);
        alert(json[0].name);
    },
    error:function(){
        alert(‘fail‘);
    }
});
public void ProcessRequest (HttpContext context) {
    context.Response.ContentType = "text/plain";
    String callbackFunName = context.Request["callbackparam"];
    context.Response.Write(callbackFunName + "([ { name:\"John\"}])");
}

 

 

跨域请求

标签:style   blog   http   color   io   os   使用   java   ar   

原文地址:http://www.cnblogs.com/jellybaobao/p/3994765.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!