2012年9月6日 星期四

【jQuery】Ajax to Servlet

這裡介紹一下在jQuery用Ajax發出 Request到後端的 Servlet 時

遇到關於Cross domain 的問題,以下放一些之前做介紹內容


jQuery Ajax

•參考(必讀):http://api.jquery.com/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
•JSON(Javascript Object Notation)是一種輕量級的資料交換語言,
以文字為基礎,且易於讓人閱讀。
•{
         "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“}







沒有留言:

張貼留言