遇到關於Cross domain 的問題,以下放一些之前做介紹內容
jQuery Ajax
•常用的setting屬性:
contentType
data
dataType
error(jqXHR, textStatus, errorThrown)
success(data, textStatus, jqXHR)
Same
origin policy & JSONP
•瀏覽器端的 Javascript 只能存取 protocol、domain name、port 一致下的檔案,
若沒有這個限制的話 網站 A 就能透過使用者取用網站 B 的內容(Cross domain)。
•自己的測試結果,Ajax 可以請求到遠端的Servlet,且Servlet也成功收到請求並回傳資
料(200),但是Ajax無法得到結果。
•透過FireFox的FireBug可以發現Response的封包內容是空的。
•三種避開
Same origin policy 的作法:
1.透過自己網站的
proxy script
2.可以透過<script type=“text/javascript” src=“http://xxx”> 直接載入其他網域的Javascript file
3. 運用 JSONP
JSONP其實就是運用JSON資料格式,及回呼函式(callback=?)的方式
達到取得其它網域的資料並且執行後續callback的function
•Our
domain 先寫好 Ajax 的response callback
Function,並採用 JSONP 請求 Other domain
的URL,而Other domain 必須傳回JSONP所產生的Callback function
並將JSON格式的資料當作參數傳入
因此結果就是Our domain的callback Function接收來自Other domain 所產生的JSON資料
Java
& JSON
以文字為基礎,且易於讓人閱讀。
•{
"name":"Javalearning",
"price":"1000",
"author":{"publisher":"Flag", "tel":"0963181047"}
}
幾個較知名的 JAVA 與 JSON 之間的轉換 library
JSON.simple,Jackson,gson
以下用一個Jackson做為範例
•Jackson
可以將 Java 的 Map、List 、Array 、POJO …等等與 JSON格式互相作轉換。
•ObjectMapper mapper = new ObjectMapper();
Book book = new Book();
book.setName("Java
learning");
book.setPrice("1000");
mapper.writeValueAsString(book);
Result = {"name":"Javalearning","price":"1000“}
沒有留言:
張貼留言