struts2 jsonp 解决跨域问题

        JSON是一种数据交换格式,而JSONP是一种依靠开发人员的聪明才智创造出的一种非官方跨域数据交互协议

JSON的优点:

1、基于纯文本,跨平台传递极其简单;

2、Javascript原生支持,后台语言几乎全部支持;

3、轻量级数据格式,占用字符数量极少,特别适合互联网传递;

4、可读性较强,虽然比不上XML那么一目了然,但在合理的依次缩进之后还是很容易识别的;

5、容易编写和解析,当然前提是你要知道数据结构;

JSON的格式或者叫规则:

JSON能够以非常简单的方式来描述数据结构,XML能做的它都能做,因此在跨平台方面两者完全不分伯仲。

1、JSON只有两种数据类型描述符,大括号{}和方括号[],其余英文冒号:是映射符,英文逗号,是分隔符,英文双引号""是定义符。

2、大括号{}用来描述一组“不同类型的无序键值对集合”(每个键值对可以理解为OOP的属性描述),方括号[]用来描述一组“相同类型的有序数据集合”(可对应OOP的数组)。

3、上述两种集合中若有多个子项,则通过英文逗号,进行分隔。

4、键值对以英文冒号:进行分隔,并且建议键名都加上英文双引号"",以便于不同语言的解析。

5、JSON内部常用数据类型无非就是字符串、数字、布尔、日期、null 这么几个,字符串必须用双引号引起来,其余的都不用,日期类型比较特殊,这里就不展开讲述了,只是建议如果客户端没有按日期排序功能需求的话,那么把日期时间直接作为字符串传递就好,可以省去很多麻烦。

    JSONP是一个非官方的协议,它允许在服务器端集成Script tags返回至客户端,通过javascript callback的形式实现跨域访问(这仅仅是JSONP简单的实现形式)

    struts2 框架返回jsonp格式数据需要配置如下格式

<result type="json">
  <param name="callbackParameter">callback</param>
</result>
这样struts2返回的结果就能够被封装成jsonp格式的数据了,这是服务端的写法。客户端必须在调用ajax的时候传入callback函数如下例:

$( "#registrationPage" ).live( "pageinit", function(){
alert("sdf");
	$( "form" ).submit(function () {
		$.mobile.showPageLoadingMsg();
		alert("hello");
		$.ajax({
		  	url: 'http://192.9.203.34:8081/cust/admin/phonegap_getMenuList',
		  	type: "POST",
		  	contentType: "application/json; charset=utf-8",
		  	dataType: "jsonp",
		  	jsonp: "jsoncallback",
			data: $("form#register").serialize(),
		  	success: function( response ) {
				$.mobile.changePage( "register-thanks.html", { data: {"email": response.email}} );
		  	},
			error: function( jqXHR, textStatus, errorThrown ) {
				$.mobile.hidePageLoadingMsg();
				console.log('Status: ' + textStatus + "\nError: " + errorThrown);
			}
		});
		
		return false; // Prevent a form submit
	});	
});
其中的jsonp属性就是callback,调用成功后js会自动调用sucess定义的函数。


转载于:https://my.oschina.net/u/218567/blog/173197

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值