SSH框架下ajax調用action並生成JSON再傳遞到客戶端【以get和post方式提交】


需要完成的任務:

主要是把JSP頁面上圖片ID傳給服務器端,服務器讀取cookie看是否有username,如果有則根據ID讀取MongoDB數據庫,讀出圖片URL,再存放到mysql中的collection數據庫中,實現了收藏功能。

第一步:就是使用ajax實現前后台的交互。

jsp頁面代碼:

<a id="1" class="bsc" onclick="collect(this.id)"></a>

js代碼:

<script>
function
collect(id) { //var newwin=window.open() var str=document.getElementById(id).src; var arr=str.split("/"); //切片 //alert(arr[5]); var re = /\d+/g; // 每次匹配至少一個數字 且全局匹配 如果不是全局匹配,當找到數字123,它就會停止了。就只會彈出123.加上全局匹配,就會從開始到結束一直去搜索符合規則的。如果沒有加號,匹配的結果就是1,2,3,5,4,3,3,8,7,9並不是我們想要的,有了加號,每次匹配的數字就是至少一個了。 var num = arr[5].match(re); //取圖片名稱,再用正則表達式匹配數字 num = num[0]; alert(num);
//以上是實現獲取圖片ID的功能;
//判斷瀏覽器
if(window.ActiveXObject){ myAjaxObject = new ActiveXObject("Microsoft XMLHTP"); }else{ myAjaxObject = new XMLHttpRequest(); }
/*
1.open() 方法的 url 參數是服務器上文件的地址:該文件可以是任何類型的文件,比如 .txt 和 .xml,或者服務器腳本文件,
比如 .asp 和 .php (在傳回響應之前,能夠在服務器上執行任務),這里我是請求的是action,並把你想傳送的數據放在后面,具體見代碼。

    2. 與 POST 相比,GET 更簡單也更快,並且在大部分情況下都能用。

     然而,在以下情況中,請使用 POST 請求:

  • 無法使用緩存文件(更新服務器上的文件或數據庫)
  • 向服務器發送大量數據(POST 沒有數據量限制)
  • 發送包含未知字符的用戶輸入時,POST 比 GET 更穩定也更可靠

    3.true還是false,true是表示異步請求,異步請求就是,請求完服務器,可以不用只等待服務器響應,可以去執行其他操作,直到收到服務器響應。 

    4.send()將請求發送到服務器

*/ myAjaxObject.open("post","collect.action?date="+num,true); myAjaxObject.onreadystatechange = actionResponse; //看下面函數 myAjaxObject.send(); } //獲取服務器響應
/*
responseText 獲得字符串形式的響應數據。
還有其他屬性,自行查找
這里我只測試讀取一個數據,多數據可以循環讀取
*/
function actionResponse(){ if(myAjaxObject.readyState==4){ if(myAjaxObject.status==200){ var returnJSONString = myAjaxObject.responseText; var returnJSON = JSON.parse(returnJSONString); var showString = ""; /*for(var i=0;i<returnJSON.length;i++){ showString = }*/ showString = returnJSON[0]; alert(showString); } } }
</script>

structs.xml代碼:

<action name="collect" class="action.collection" method="collect">

后台action代碼:

package action; import java.io.IOException; import java.util.ArrayList; import java.util.List; import javax.servlet.http.HttpServletRequest; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionSupport; import net.sf.json.JSONArray; import net.sf.json.JSONObject; public class collection extends ActionSupport{ public String collect() throws IOException{
     //發送數據 List listString
= new ArrayList(); listString.add("zx"); JSONArray json = JSONArray.fromObject(listString); System.out.println(json.toString()); ServletActionContext.getResponse().setContentType("text/html"); ServletActionContext.getResponse().setCharacterEncoding("utf-8"); ServletActionContext.getResponse().getWriter().printf(json.toString()); ServletActionContext.getResponse().getWriter().flush(); ServletActionContext.getResponse().getWriter().close();
     //接收數據 String num
= ServletActionContext.getRequest().getParameter("date"); System.out.println(num); return null; } }

以上代碼實現了簡單的數據接收發送。以上的后台發送的數據類型是list中存放String,根據自己需要。可以list中存放Bean,Map中存放字符串或Bean發送。

同理,前台傳送數據類型也可以根據需要改變類型

例如:

var  info={

num:"data1",

num2:"data2",

}

完事了。接下來我要去實現讀取cookie數據,判斷用戶是否處於登錄狀態,希望對你有幫助,有錯誤或改進的地方歡迎指正。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM