數組類型參數傳遞問題:$.ajax傳遞數組的traditional參數傳遞必須true


數組類型參數傳遞:

  若一個請求中包含多個值,如:(test.action?tid=1&tid=2&tid=3),參數都是同一個,只是指定多個值,這樣請求時后台會發生解析錯誤,應先使用 tradititonal 格式化

$.ajax({ type:"post", url:"test.action", data:{ tid:[1,2,3] }, traditional:true, …… });

  起初我認為traditional:true,可有可無,但是后來不用traditional的時候,發現后台無法獲取selectUsers的值,那么可以肯定的是traditional默認值是false。
  當提交的參數是數組( {selectUsers:[value,value,value]} ),如果是false的話,則提交時會是"selectUsers[]=value&selectUsers[]=value";如果設置成true,則提交時會是"selectUsers=value&selectUsers=value",這樣后台就能用String[] ids=request.getParameterValues("selectUsers"); 獲取到值
  官方文檔的解釋如下:traditional   類型:Boolean
  如果你想要用傳統的方式來序列化數據,那么就設置為 true。(底層原理其實就是設置param()方法的traditional參數為true
  Set this to true if you wish to use the traditional style of param serialization

1、前台jquery

function deleteAll() { var selectUsers=new Array(); //var selectUsers = null;
    $(":checkbox[name='userID']").each(function() { if ($(this).prop("checked")) selectUsers.push($(this).val()); //selectUsers += "," + $(this).val();
 }); $.ajax({ async : false, traditional: true, type:"post", url:"elecUserAction_delete.do", data:{selectUsers:selectUsers}, success:function(responsText){ if(responsText=="1"){ alert("刪除成功"); } } }); }

2、后台Action代碼

public String delete(){ String[] ids=request.getParameterValues("selectUsers"); System.out.println(ids.toString()); PrintWriter out = null; out.write("1"); return home(); }

總結:

  當ajax傳的data數據是數組時,必須設置traditional參數,並為true,然后后台才可以通過request.getParameterValues()方法獲取到數據,否則會解析出錯。

 


免責聲明!

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



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