2015-01-04 31 views
0

ajax如何確定事務是成功還是錯誤?spring mvc和ajax表單子命令

我有一個AJAX函數來處理表單提交:

function createTranCall() { 
    var nameval = $('#c-t-t').val(); 
    var amountval = $('#c-t-a').val(); 
    alert(nameval + " " + amountval); 
    //return false; 
    $.ajax({ 
     type: "POST", 
     url: "${pageContext.request.contextPath}/create/transaction", 
     cache: false, 
     data: "traname=" + nameval + "&tranamount=" + amountval, 
     success: function(response) { 
      /* $('#result').html(''); 
      var obj = JSON.parse(reponse); 
      $('#result').html(obj.name); */ 
      alert("success"); 
     }, 
     error: function() { 
      alert("Error while request .."); 
     } 
    }); 
} 

和我的控制器:

@RequestMapping(value="/create/transaction", method=RequestMethod.POST) 
@ResponseBody 
public MyTransaction createTran(HttpServletRequest request, HttpServletResponse response) throws Exception { 
     LOGGER.info("create new Transaction"); 
     MyTransaction myTran = MyTransaction.getInstance(); 

     String name = request.getParameter("traname"); 
     String amount = request.getParameter("tranamount"); 
     System.out.println("name: " + name + " - amount: " + amount); 

     myTran.setName(name); 
     return myTran; 
    } 

所以我可以從我的控制器發送和獲取數據。不過,我一直打錯了狀態,並不知道如何到達那裏。我有搜索像「什麼讓阿賈克斯打錯誤狀態」,但找不到有用的東西(可能我沒有拿出更好的關鍵字)。

任何幫助和建議將是一個很大的幫助。謝謝。

+0

查看您的瀏覽器的網絡選項卡:響應代碼最可能是500:內部服務器錯誤。這意味着您需要查看應用程序的服務器端日誌輸出以查找異常的堆棧跟蹤,以顯示導致失敗的原因。 – kryger

+0

感謝提示。我得到「HTTP狀態405 - 請求方法」POST'不支持「。我嘗試省略method = RequestMethod.POST,但它沒有幫助。 – WhatAName

+0

看起來像Dispatcher Servlet匹配錯誤的方法 - 你有任何其他方法具有相同的URL映射嗎?你確定你正在顯示你正在運行的實際代碼嗎?使用REST客戶端(例如用於Chrome的高級REST客戶端)而不是您自己的客戶端應用程序試驗和發送請求可能會更快。 – kryger

回答

-1

據我所知,你總能得到此塊:

error: function() { 
      alert("Error while request .."); 
     } 

最常見的問題是,有沒有映射器類MyTransactionJSON等 嘗試添加:

  • com.fasterxml.jackson.databind.jar
  • com.fasterxml.jackson.core.jar
  • com.fa sterxml.jackson.annotation.jar

    或者如果你正在使用行家

    <dependency> 
         <groupId>com.fasterxml.jackson.core</groupId> 
         <artifactId>jackson-databind</artifactId> 
         <version>2.2.3</version> 
        </dependency> 
        <dependency> 
         <groupId>com.fasterxml.jackson.core</groupId> 
         <artifactId>jackson-annotations</artifactId> 
         <version>2.2.3</version> 
        </dependency> 
        <dependency> 
         <groupId>com.fasterxml.jackson.core</groupId> 
         <artifactId>jackson-core</artifactId> 
         <version>2.2.3</version> 
        </dependency> 
    

    的版本可能不同

    你也可以明確地告訴AJAX的數據,你期望的類型

    dataType: 'json' 
    

    http://api.jquery.com/jquery.ajax/ :從服務器返回0
    ,如果你仍然得到錯誤狀態,嘗試做一些像

    $.ajax({ 
    
          url : 'your_url', 
          type: 'GET', 
          dataType: 'json', 
          contentType: 'application/json', 
          mimeType: 'application/json', 
          data : ({ 
    
          traname: nameval, 
          tranamount: amountval 
    
          }), 
    
          success: function (response) { 
    
          }, 
          error: function() 
          { 
    
          } 
    
         }); 
    

    希望這個答案對你有用

+0

感謝您的回覆。我已經有這些依賴關係。我曾嘗試添加dataType,contentType和mineType,但它不會更改結果,並且控制檯現在顯示「name = null - amount = null」 – WhatAName

+0

您是否嘗試使用「獲取」請求並聲明數據在我的例子中。我從未使用過「數據」聲明 – InsFi

+0

我添加了一種新的方法來支持GET並嘗試您的代碼。它給了我相同的HTTP 405狀態。順便說一句,因爲它是一種形式,我試圖用POST發送它。 – WhatAName

0

首先嚐試從服務器發送唯一字符串

@RequestMapping(value="/create/transaction", method=RequestMethod.POST) 
@ResponseBody 
public MyTransaction createTran(HttpServletRequest request, HttpServletResponse response) throws Exception { 
     LOGGER.info("create new Transaction"); 
     MyTransaction myTran = MyTransaction.getInstance(); 

     String name = request.getParameter("traname"); 
     String amount = request.getParameter("tranamount"); 
     System.out.println("name: " + name + " - amount: " + amount); 

     myTran.setName(name); 
     return myTran; 
    } 

將其轉換爲

@RequestMapping(value="/create/transaction", method=RequestMethod.POST) 
@ResponseBody 
public String createTran(){ 

     return "works"; 
    } 

如果這不起作用,那麼這意味着它有服務器java代碼的問題。這也意味着你的AJAX調用沒有問題

第二你可以將MyTransaction返回類型更改爲字符串,看看它是否工作。在返回值時改變類型。