問題1:html
使用ajax訪問的後臺,後臺正常執行,而且正常返回數據,可是不能進入前臺的ajax回調函數中ajax
問題展現:spring
問題解決:json
最後發現是由於後臺的方法並未加註解:@ResponseBody,致使方法不認識最後返回的是給ajax的data,而是覺得要去找這個頁面因此並未找到!!app
1 @RequestMapping("/queryAllDisease") 2 @ResponseBody 3 public PageInfo<Disease> queryAllDisease(String productId, ModelMap model, int pageNo , int pageSize){ 4 Product product =new Product(); 5 product.setProductId(productId); 6 Criteria criteria = getCurrentSession().createCriteria(Disease.class); 7 criteria.add(Restrictions.eq("product", product)); 8 return diseaseService.findQuery(criteria, pageNo, pageSize); 9 }
一樣的,若是Controller中的方法執行完成以後 不想返回前臺,就此打住,則也須要加上@ResponseBodyjsp
由於即便方法返回值爲voidide
spring也會按照前臺請求過來的頁面地址去找,找不到就會以下:函數
因此,在後臺:【如下的代碼依舊是 按照前臺department/addPosition.htmls繼續找下去,若是想在此打住,不要再去前臺了,添加註解】spa
1 @RequestMapping("addPosition") 2 public void addPosition(Position position){ 3 position.setCreateDate(new Timestamp(System.currentTimeMillis())); 4 position.setUpdateDate(new Timestamp(System.currentTimeMillis())); 5 //操做人 未插入 6 positionService.save(position); 7 }
更改以後以下:3d
1 @RequestMapping("addPosition") 2 @ResponseBody 3 public void addPosition(Position position){ 4 position.setCreateDate(new Timestamp(System.currentTimeMillis())); 5 position.setUpdateDate(new Timestamp(System.currentTimeMillis())); 6 //操做人 未插入 7 positionService.save(position); 8 }
問題2:
在此基礎上,又發現一種新的狀況:
後臺代碼以下:
1 @RequestMapping("verifyFormula") 2 @ResponseBody 3 public void verifyFormula(String formula){ 4 InfixInToSuffix is = new InfixInToSuffix(); 5 String a = null; 6 try { 7 if(is.userPattern(formula)){ 8 a = is.toSuffix(formula); 9 } 10 } catch (Exception e) { 11 System.out.println("公式有問題"); 12 } 13 }
或者:
1 @RequestMapping("verifyFormula") 2 @ResponseBody 3 public String verifyFormula(String formula){ 4 InfixInToSuffix is = new InfixInToSuffix(); 5 String a = null; 6 try { 7 if(is.userPattern(formula)){ 8 a = is.toSuffix(formula); 9 } 10 } catch (Exception e) { 11 System.out.println("公式有問題"); 12 } 13 return a; 14 }
這兩種狀況,雖然前臺js中使用ajax訪問了後臺,可是後臺方法處理完
1.void沒有返回值
2.雖然有返回值,可是String a = null;可能會直接將這個a返回,可是a初始化就是Null,也就是沒有開闢實際的空間,這樣也是返回不到ajax的回調函數中的!!!!!
多注意這兩種狀況!!
正確處理這種狀況,應當:
1 @RequestMapping("verifyFormula") 2 @ResponseBody 3 public String verifyFormula(String formula){ 4 InfixInToSuffix is = new InfixInToSuffix(); 5 String a = ""; 6 try { 7 if(is.userPattern(formula)){ 8 a = is.toSuffix(formula); 9 } 10 } catch (Exception e) { 11 System.out.println("公式有問題"); 12 } 13 return a; 14 }
最起碼的給String a = "";便可!!
問題3:
一樣在controller處理完後,先後臺都沒有報錯,可是也是沒有進入ajax回調函數
後臺錯誤代碼展現:
1 @RequestMapping(value = "boundWx" ,produces = "text/json;charset=UTF-8") 2 @ResponseBody 3 public String boundWx(String name,String password){ 4 List<Member> members = new ArrayList<Member>(); 5 Member member = memberService.findByUsername(name); 6 if(member == null){ 7 member = memberService.findByMobile(name); 8 if(member == null){ 9 members = memberService.findListByEmail(name); 10 } 11 } 12 if(members.size() > 0){ 13 member = members.get(0); 14 } 15 if(member != null){ 16 if(DigestUtils.md5Hex(password).equals(member.getPassword())){ 17 return "wx/member/index.jhtml"; 18 }else{ 19 return "密碼有誤"; 20 } 21 }else{ 22 return "用戶信息有誤"; 23 } 24 }
問題解決:
由於這個方法中 返回給前臺後是有亂碼出現的,因此加了:@RequestMapping(value = "boundWx" ,produces = "text/json;charset=UTF-8")
而問題就出在:此處的produces = "text/json;charset=UTF-8"與返回值的格式並不相符。
更改成以下的就能夠正常返回了:
@RequestMapping(value = "boundWx" ,produces = "text/html;charset=UTF-8")
問題4:
新的同類型問題
ajax + springMVC後臺處理完成跳轉給前臺的ajax的回調函數中,
表現:後臺程序執行了三次,可是最後都不會返回到前臺回調函數中,且先後臺都不報錯!
問題:請認真檢查前臺使用了ajax的是在哪一個按鈕的點擊事件中,這個點擊事件是否 return ; 請認真檢查前臺jsp中是否重複引用了jQuery等js文件致使後臺會重複執行幾回
問題5:
依舊是ajax + springMVC後臺處理完成跳轉給前臺的ajax的回調函數中,
雖然前臺返回狀態是200,請求成功,可是始終不進入ajax的success回調方法。
問題:檢查後臺接口是否是返回的是null,也就是return null;
由於即便狀態是200.可是隻能表明先後臺是聯通的,可是不表明返回的參數是有值的,若是return null;那麼回到前臺之後,判斷success字段值若是沒有值,固然會進入error的回調函數,而不會進入success的回調函數。