ajax 發送json 后台接收 遍歷保存進數據庫


    前台怎么拿參數的我就不管了我也不會

反正用這個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的格式一定要寫完整規范  不然不好取出來

有的問題實在解決不了的就重啟電腦 哈哈哈

 


免責聲明!

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



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