Java-JSON跨域问题
这是客户端获取JSON的
jQuery.getJSON("http://122.227.214.107:8844/jsonInterface/addUser?callback=?",function(data){
alert("11111111111111");
});
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
服务端返回的格式如下:
callbackValue({'key':'value'})
用一个括号把你要返回的JSON格式的数据(对象或者数组)括起来,然后前边加上callbackValue
callbackValue 就是你上面getJSON中传过去的callback的值
你只要保证服务器端返回的是上面这个格式的数据即可
跨域调用有JSONP和跨站脚本两种方法实现
JSONP其实不是AJAX,是通过脚本往head里面添加一个<script>标签,src是一个跨域调用的地址,这个调用返回的不是JSON,而是一段javascript,一般是:jsonpcallback(({data:"abc",data2:"def"}));这种样子的
然后你在你的程序里面定义一个function jsonpcallback(data){}就可以接收数据了。
jQuery里面的JSONP格式是getJSON里面的url里有"callback=?",这个?在实际调用的时候会替换成别的某个值,服务器端要根据这个值来返回,不能是一个写死的值。也就是说服务器端要读callback这个QueryString,比如说callback=jsonp123的时候就要输出:
jsonp123({data:"abc",data2:"def"});
这样的代码。
另外最好添加上http头:header('Content-Type: application/javascript');
如果希望用固定的回调函数名,可以用$.ajax函数,里面可以设置的参数更多,参考jsonp和jsonpCallback两个参数。
跨站脚本则更直接一点,直接在网页上添加一个来自目标站的脚本:
<script type="javascript" src="http://122.227.214.107:8844/cross.js"/>
这个脚本里面访问http://122.227.214.107:8844/不会受到跨域限制。因此可以在里面加一个函数:
function AnyWhereAjax(url, data, callback)
{
$.post(url,data,callback);
//$.getJSON(url,data,callback);
}
然后在外面的脚本中使用AnyWhereAjax调用:
AnyWhereAjax(crossDomainUrl, data, function(data){...});