2015-01-04 3 views
0

Как ajax определяет, была ли транзакция успешной или ошибочной?spring mvc и ajax form submition

У меня есть функция 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; 
    } 

Так что я могу отправить и получить данные от моего контроллера. Однако я продолжаю сталкиваться с состоянием ошибки и не знаю, как я туда доберусь. У меня есть поиск чего-то типа «Что делает ajax hit error state», но не нашел ничего полезного (возможно, у меня не было лучшего слова).

Любая помощь и предложение будут большой помощью. Спасибо.

+0

Просмотрите вкладку сети вашего браузера: код ответа был, скорее всего, 500: Internal Server Error.Это означает, что вам нужно будет посмотреть вывод журнала вашего сервера на стороне приложения, чтобы найти трассировку стека исключений, которая показывает, что вызвало сбой. – kryger

+0

Спасибо за подсказку. Я получил «HTTP Status 405 - метод запроса« POST »не поддерживается». Я пытаюсь пропустить метод = RequestMethod.POST, но он не помогает. – WhatAName

+0

Похоже, что диспетчерский сервлет соответствует неправильному методу - есть ли у вас какие-либо другие методы с одинаковым сопоставлением URL-адресов? Вы уверены, что показываете фактический код, который вы используете? Быстрее экспериментировать и отправлять запросы с использованием клиента REST (например, Advanced REST Client для Chrome), а не для собственного клиентского приложения. – kryger

ответ

-1

как я понимаю, вы всегда получите этот блок:

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

наиболее распространенная проблема является то, что нет картографа вашего класса MyTransaction к JSON и т.д. попытке добавить:

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

    или если вы используете Maven:

    <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/

    , если вы все равно получите состояние ошибки, попробуйте сделать что-то вроде

    $.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 и myType, но он не изменит результат, а консоль теперь отображает «name = null - amount = null» – WhatAName

+0

, вы пытались использовать запрос «Get» и объявлять данные, такие как в моем примере. Я никогда не использовал вашу декларацию 'data' – InsFi

+0

Я добавил новый метод поддержки GET и попробую ваш код. Он дает мне тот же статус HTTP 405. Btw, так как это форма, я пытаюсь отправить ее с помощью 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 тип возврата в строку, чтобы узнать, работает ли она. измените тип при возврате значения.