2013-12-08 2 views
0

У меня проблема с моим вызовом Ajax. Вот мой контроллер:Ajax запрос на вызов не работает

@RequestMapping(value = { "/sendMsg" }, method = RequestMethod.POST) 
public ModelAndView postSendMessage(@ModelAttribute("message") MsgParam param) { 
ModelAndView result= new ModelAndView("sendMessage"); 
...Controller logic... 
} 

У меня есть форма в моем sendMessage.jsp, который должен вернуть JSON. Однако вызов ajax не будет работать, поэтому теперь я пытаюсь вернуть это сообщение html через вызов ajax, который не должен иметь никакого значения для пользователя. Все, что я хочу сделать сейчас, это сделать простой вызов ajax с возвратом html. А вот форма в моем JSP:

<form:form id="postForm" method="POST" commandName="message" action="${pageContext.request.contextPath}/sendMsg"> 
    ... input fields with path attributes... 
</form:form> 

Это работает, как ожидалось, так что почему опущена логика. я попытался добавить следующий скрипт после формы:

<script> 
     $('#postForm').submit(function(evt) { 
       evt.preventDefault(); 
       alert("ajax"); 
       msgData = $('#postForm').serialize(); 
       $.ajax({ 
       url: $('#postForm').action, 
       type: 'POST', 
       data: msgData 
       }); 
     }); 
    </script> 

Так что теперь, когда я пытаюсь заполнив форму так же, как и раньше, я получаю Аякс предупреждения перед вызовом АЯКСА выскакивает, но запрос страницы сообщения не отправляются и Ничего не произошло. Кто-нибудь знает, что не так?

Большое спасибо ..

+0

Любые ошибки в консоли? – epascarello

+0

Имеет ли ваш элемент формы атрибут «имя»? Это случилось со мной несколько раз с помощью метода сериализации формы jQuery. –

+0

ошибок нет в консоли .. – user3080263

ответ

0

Попробуйте это, чтобы проверить, что вы отправляете и прием:

<script type="text/javascript"> 
//Wait for jQuery to be loaded 
$(function(){ 

function _submitHandler(evt){ 
      evt.preventDefault(); 
      //form data placeholder 
      var formData={}; 
      //Serialize the form as an array of objects{name and value} 
      var msgData = $('#postForm').serializeArray(); 
      //fill the formData object with name:value pairs 
      //from the serialized array 
      for(var i=0, l=msgData.lenght; i<l; i++){ 
       formData[msgData[i].name]=msgData[i].value; 
      } 
      //Prepare ajax Object 
      var ajaxObj = { 
       url: $('#postForm')[0].action, 
       type: 'POST', 
       data: formData 
      }; 
      //Inspect ajax object in console 
      console.log("Ajax Call"); 
      console.log(ajaxObj); 
      $.ajax(ajaxObj,function(response){ 
       console.log("Server Response"); 
       console.log(response);}); 
      } 
$('#postForm').submit(_submitHandler); 

}); 
</script> 

Для URL нужно Subindex на JQuery URL: $ ('# postForm') [ 0] .action или получить атрибут url: $ ('# postForm'). Attr ('action'); очевидно, что второй будет только дорогой, а первый даст вам весь URL-адрес. Цикл может быть пропущен, если вы сделаете это:

$("#postForm").serializeArray().forEach(function(el){formData[el.name]=el.value}); 

проблема с Foreach является то, что не поддерживается всеми браузерами **

+0

Итак, это то, что я получаю event.returnValue устарел. Вместо этого используйте стандартное событие event.preventDefault(). jquery-1.9.1.js: 3345 Ajax Call login: 30 Object {url: undefined, type: "POST", data: "sender = 1 & receivers = 2 & body = aageg"}, но он все равно не публикует страницу. параметры действительны – user3080263

+0

@ user3080263 hmmm .. интересно, что вы получаете неопределенный url ... –

+0

это была просто проблема синтаксиса ..это выход Ajax Call login: 30 Объект {url: "https: // localhost: 8443/MsgManagement/receive", введите: "POST", данные: "sender = 1 & receivers = 2 & body = ageg"}, что просто fine – user3080263

Смежные вопросы