前台怎么拿參數的我就不管了我也不會
反正用這個ajax沒錯
ajax 代碼 一定要寫明http請求類型 {
contentType:"application/x-www-form-urlencoded; charset=utf-8",
}這一段很重要(就是因為這個原因我找了整整一下午)
服務器為什么會對表單提交和文件上傳做特殊處理,因為表單提交數據是名值對的方式,且Content-Type為application/x-www-form-urlencoded,
而文件上傳服務器需要特殊處理,普通的post請求(Content-Type不是application/x-www-form-urlencoded)數據格式不固定,
不一定是名值對的方式,所以服務器無法知道具體的處理方式,所以只能通過獲取原始數據流的方式來進行解析。
jquery在執行post請求時,會設置Content-Type為application/x-www-form-urlencoded,所以服務器能夠正確解析,
而使用原生ajax請求時,如果不顯示的設置Content-Type,那么默認是text/plain,這時服務器就不知道怎么解析數據了,
所以才只能通過獲取原始數據流的方式來進行解析請求數據。
function orderFood(){ alert("進來了++++++++++"); final_settle(); /* alert("http://192.168.10.98:8080/jeesite/f/cms/received/submit"); */ console.log(JSON.stringify(globalJsonArray)); $.ajax({ type : "post", url : "/jeesite/f/received/submit", dataType:"json", contentType:"application/x-www-form-urlencoded; charset=utf-8", data:{orderInfo:jsonStr},//JSON.stringify(globalJsonArray), success : function(result) { alert(result.msg); } }); }
后面接收的代碼 寫好方法名稱還有請求類型
@Controller @RequestMapping(value = "${frontPath}/received") public class FrontReceivedata extends BaseController{ @RequestMapping(value = "submit",method =RequestMethod.POST) public String submit(HttpServletRequest request,HttpServletResponse response){ String week = request.getParameter("orderInfo"); System.out.println("====================================="); System.out.println("requestJson:"+week); System.out.println("=====================================");
定幾個全局變量 然后吧json轉換成JSONObjcet格式(可以百度下格式)for循環下得到相應的值
最好加個判空的if
獲取到了值放進那張表里保存的方法里面
for(int i =0 ;i<jsonArray.size(); i++){ //轉換 //JSONObject list = jsonArray.getJSONObject(i); JSONObject list = (JSONObject) jsonArray.get(i); //各變量的if(){} //測試值 S System.out.println("orderList:"+orderList); System.out.println("allpriice:"+allpriice); System.out.println("num:"+num); //判斷為空 if(list.get("orderlist")!= null){ orderList = (JSONArray)list.get("orderlist"); } if(list.get("allpriice") != null){ allpriice = (String)list.get("allpriice"); } if(list.get("num") != null){ num = (String)list.get("num"); } } //把數據放進保存方法里面 WOrder worder = new WOrder(); String a="WXDC"; //訂單號前綴 Date dt= new Date(); Long time= dt.getTime();//這就是距離1970年1月1日0點0分0秒的毫秒數 String SingleNumber=a+time; //完整訂單號 worder.setCid(SingleNumber); //訂單號 worder.setAmount(allpriice);//總金額 worder.setOrderNumber(num);//桌號 Worderservice.save(worder);
如果json里面有多個字段 就用兩個for循環 循環出來 然后保存進指定的數據庫表里
if(orderList.size()!=0){ for(int j=0 ;j<orderList.size();j++){ JSONObject orderInfo = (JSONObject) orderList.get(j); //判斷為空 if(orderInfo.get("number") != null){ number = (String)orderInfo.get("number"); } if(orderInfo.get("foodid") != null){ foodid = (String)orderInfo.get("foodid"); } System.out.println("number+++:"+number); System.out.println("fooddid+++:"+foodid); //數據保存方法 WChildorder wchildorder = new WChildorder(); wchildorder.setOid(SingleNumber); //訂單號 wchildorder.setNumber(number);//分量 wchildorder.setDid(foodid);//菜的id wchiservice.save(wchildorder); } }
最好拋個異常 讓前台判斷 返回的是一個map 不過返回的map 方法上面需要加@ResponseBody這個注釋
result.put("result", "保存成功"); result.put("code", "200"); result.put("SingleNumber", SingleNumber); } catch (Exception e) { e.printStackTrace(); result.put("result", "保存失敗"); result.put("code", "100"); } //返回的 return result; }
到這就差不多了 自己寫的過程中多測試測試 多寫幾個輸出語句看有沒有拿到值
還有的前台傳過來json的格式一定要寫完整規范 不然不好取出來
有的問題實在解決不了的就重啟電腦 哈哈哈
