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 只能存取 protocoldomain nameport 一致下的檔案,
  若沒有這個限制的話 網站 A 就能透過使用者取用網站 B 內容(Cross domain)
自己的測試結果,Ajax 可以請求到遠端的Servlet,且Servlet也成功收到請求並回傳資
  料(200)但是Ajax無法得到結果。
透過FireFoxFireBug可以發現Response封包內容是空的。

三種避開 Same origin policy 的作法:
        1.透過自己網站的 proxy script 
        2.可以透過<script type=“text/javascriptsrc=“http://xxx”> 直接載入其他網域的Javascript file
        3. 運用 JSONP  

   JSONP其實就是運用JSON資料格式,及函式(callback=?)的方式
  達到取得其它網域的資料並且執行後續callbackfunction 











Our domain 先寫好 Ajax response callback Function,並採用 JSONP 請求 Other domain
  URLOther domain 必須傳回JSONP產生的Callback function 
  並將JSON格式的資料當作參數傳入
  因此結果就是Our domaincallback Function接收來自Other domain 所產生的JSON資料



Java & JSON
JSONJavascript Object Notation)是一種輕量級的資料交換語言
以文字為基礎,且易於讓人閱讀
{
         "name":"Javalearning",
      "price":"1000",
         "author":{"publisher":"Flag", "tel":"0963181047"}
  }

幾個較知名的 JAVA 與 JSON 之間的轉換 library
JSON.simple,Jackson,gson
以下用一個Jackson做為範例

Jackson  可以將 Java MapList 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“}







沒有留言:

張貼留言