jQuery_review之使用$.getScript()以及$.getJSON來與服務端進行非同步資訊互動,jquerygetscript

來源:互聯網
上載者:User

jQuery_review之使用$.getScript()以及$.getJSON來與服務端進行非同步資訊互動,jquerygetscript
    jQuery還提供了兩個非常實用的方法,分別是$.getScript()以及$.getJSON()。這個兩個方法非常之重要,假設我們現在要編寫一個架構,如果能在後台控制前台表格的動作,我們應該怎麼做?肯定是要在後台向前台發送一個JavaScript,從而讓前台的JavaScript執行,當然有很多方法,比如建立一個Script的節點放在DOM樹中,或者是在HTML中增加一個<script>節點,都是解決這個問題的方法。但是getScript也不失是解決這個問題的一個很好地方案。
    此外,現在JSON由於書寫簡便,傳輸資料比較小,資料冗餘度好,而慢慢的大有取代XML的形式。Google也提供了很多第三方的可靠的json轉換的解決方案。所以json的威力還是不能小瞧的。
    使用jQuery的這兩個方案,有幾個要注意的點:這兩個方法$.getScript()以及$.getJSON()都有兩個參數,第一個參數是提供給jQuery向什麼地址尋求資源,第二個就是資源返回之後,會提供什麼樣子的函數來調用上面的資源,第一個回呼函數是用來執行上面的JavaScript方法中的函數,第二個回呼函數則是用來解析剛剛擷取的JSON的字串。此外,JSON的格式是這樣的{"name1":"value1","name2":"value2"},請注意裡面的不是單引號,而是雙引號,如果寫成引號,可能會導致jquery無法解析上面的JSON字串。最後,如何解析JSON?data['name1']以及使用$.each(data,function(idx,item){})來進行解析,要根據JSON的格式不同選擇正確的解析方式。
前端的DEMO代碼如下:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html>  <head>  <script type="text/javascript" src="jquery-1.8.3.js"></script><script type="text/javascript">$(function(){$("#getContent").click(function(){$.getScript("czz.js",function(){alertHtml($("#showText"));})});$("#getJson").click(function(){$.getJSON("test?name=czz&address=dszy",function(data){var str = data['name']+" "+data['address'];$("#showText").empty().text(str);});});});  </script>  </head>  <body>  <div id="showText"><span>He who hesitates is lost.</span></div>  <input type="button" id="getContent" value="getAjax">  <input type="button" id="getJson" value="getJson">  </body></html>


後端的DEMO代碼如下:
@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {String name = req.getParameter("name");String address = req.getParameter("address");StringBuffer sb = new StringBuffer("");sb.append("{\"name\":\"")  .append(name)  .append("_czz\",\"address\":\"")  .append(address)  .append("_czz\"}");resp.setContentType("html/JSON;charset=utf-8");resp.getWriter().print(sb.toString());}


程式中調用的JS代碼如下:
function alertHtml(e){alert(e.html());}




對於jquery的$getJSON()問題

緩衝的問題吧,'getdate.do?id=100'後面再傳個每次不一樣的東西就好了,像這樣:
'getdate.do?id=100&t='+Math.random()
用的是隨機數,也可以用new Date()時間戳記來實現
 
為何指令碼會先被執行$getJSON外的程式,而不是$getJSON內的?解!

function Msg(){
$.getJSON(url,function(data){ //最先執行到這
alert("來過!");//getJSON取完後調用回呼函數
});
alert("飄過!");//直接alert
}
過程是這樣的。當取json的URL的時候需要一個過程。但飄過不會去等這個JSON。所以先彈出來了。當取完JSON後。觸發回呼函數。這是“來過”就彈出來了。
 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.