1. 程式人生 > >Struts2使用jQuery JSONP解決跨域問題

Struts2使用jQuery JSONP解決跨域問題

http://www.darrenfang.com/2013/12/jquery-jsonp-in-struts2/

在專案中需要新增一個數據分析模組,為了不影響現有業務,需要在另一臺伺服器上面進行相應的分析。首先想到的就是將分析

結果儲存為JSON格式,頁面通過AJAX獲取這些資料。那麼自然就涉及到AJAX跨域的問題,而使用JSONP解決跨域問題是最簡單的。

Struts 2支援JSONP,只需要在result中配置相應的屬性即可。

<action name="saleRank.*" class="saleRankAction" method="{1}">
<result
name="rank" type="json">

<param name="callbackParameter">callback</param>
<param name="includeProperties">
saleRank.*
</param>
</result>
</action>

指定callbackParameter引數即可。 頁面上面的呼叫程式碼為:

$(function
()
{

$.ajax({
type: "get",
async: true,
url: "http://remote-server/saleRank.rank.action",
data: {'nick': 'www.darrenfang.com'},
dataType: "jsonp",
jsonp: "callback",
jsonpCallback:"handle"
})
.done(function(data){
// 呼叫成功處理邏輯
})

.fail(function(){
// 呼叫失敗處理邏輯
});

});

需要注意的是Struts2中配置的callbackParameter值要和頁面AJAX呼叫引數中的jsonp的值一樣(程式碼中高亮的行)

第9行的jsonpCallback這個引數可以不用加上,jQuery會自動生成一個名稱。特別注意,如果同一個頁面中有多次JSONP呼叫,最好將這個引數設定成不同的值,或者不加上這個引數。如果這個引數的值是一樣的,那麼後面的回撥函式會覆蓋前面的。

這樣就可以成功獲得資料了。