struts2 jsonp 解決跨域問題

        JSON是一種數據交換格式,而JSONP是一種依靠開發人員的聰明才智創造出的一種非官方跨域數據交互協議 javascript

JSON的優勢: html

一、基於純文本,跨平臺傳遞極其簡單; java

二、Javascript原生支持,後臺語言幾乎所有支持; ajax

三、輕量級數據格式,佔用字符數量極少,特別適合互聯網傳遞; json

四、可讀性較強,雖然比不上XML那麼一目瞭然,但在合理的依次縮進以後仍是很容易識別的; 跨域

五、容易編寫和解析,固然前提是你要知道數據結構; 數組

JSON的格式或者叫規則: 服務器

JSON可以以很是簡單的方式來描述數據結構,XML能作的它都能作,所以在跨平臺方面二者徹底不分伯仲。 數據結構

一、JSON只有兩種數據類型描述符,大括號{}和方括號[],其他英文冒號:是映射符,英文逗號,是分隔符,英文雙引號""是定義符。 app

二、大括號{}用來描述一組「不一樣類型的無序鍵值對集合」(每一個鍵值對能夠理解爲OOP的屬性描述),方括號[]用來描述一組「相同類型的有序數據集合」(可對應OOP的數組)。

三、上述兩種集合中如有多個子項,則經過英文逗號,進行分隔。

四、鍵值對以英文冒號:進行分隔,而且建議鍵名都加上英文雙引號"",以便於不一樣語言的解析。

五、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定義的函數。
相關文章
相關標籤/搜索