2013-04-10 110 views
0

我已经搜索了很多,找不到解决方案。类似的线程也在我们的堆栈overflow.But没有use.So我创建了一个新的线程。Spring MVC + Jquery Ajax显示406错误?

我的JSP是,

<boby> 
<% System.out.println("request.getContextPath() : "+request.getContextPath()); %> 
<h1>Spring_JsonTest Example</h1> 
    <table> 
     <tr><td colspan="2"><div id="error" class="error"></div></td></tr> 
     <tr><td>Enter your name : </td><td> <input type="text" id="name"><br/></td></tr> 
     <tr><td>Your Education : </td><td> <input type="text" id="education"><br/></td></tr> 
     <tr><td colspan="2"><input type="button" value="Add Users" onclick="doAjaxPost()"><br/></td></tr> 
     <tr><td colspan="2"><div id="info" class="success"></div></td></tr> 
    </table>  
</body> 

我jQuery是,

function doAjaxPost() { 
     // get the form values 
     var name = $('#name').val(); 
     var education = $('#education').val(); 

     $.ajax({ 
     type: "POST", 
     url: contexPath + "/AddUser.html", 
     data: "name=" + name + "&education=" + education, 
     success: function(response){ 
      // we have the response 
      if(response.status == "SUCCESS"){ 
      userInfo = "<ol>"; 
      for(i =0 ; i < response.result.length ; i++){ 
       userInfo += "<br><li><b>Name</b> : " + response.result[i].name + 
       ";<b> Education</b> : " + response.result[i].education; 
      } 
      userInfo += "</ol>"; 
      $('#info').html("User has been added to the list successfully. " + userInfo); 
      $('#name').val(''); 
       $('#education').val(''); 
       $('#error').hide('slow'); 
       $('#info').show('slow'); 
      }else{ 
      errorInfo = ""; 
      alert("Success response : "+response) 
      for(i =0 ; i < response.result.length ; i++){ 
       errorInfo += "<br>" + (i + 1) +". " + response.result[i].code; 
      } 
      $('#error').html("Please correct following errors: " + errorInfo); 
      $('#info').hide('slow'); 
      $('#error').show('slow'); 
      }  
     }, 
     error: function(xhr, ajaxOptions, thrownError) 
      alert("status :"+xhr.status+"\nthrownError : "+thrownError+"\nresponseText : "+xhr.responseText); 
      alert('Error: ' +xhr.description); 
     } 
     }); 
    } 

我的控制器是,

@Controller 
public class UserController { 
    private List<User> userList = new ArrayList<User>(); 

    @RequestMapping(value="/AddUser.html",method=RequestMethod.POST) 
    public @ResponseBody JsonResponse addUser(@ModelAttribute(value="user") User user, BindingResult result){ 
     System.out.println("Add user POST method"); 
     JsonResponse res = new JsonResponse(); 
     ValidationUtils.rejectIfEmpty(result, "name", "Name can not be empty."); 
     ValidationUtils.rejectIfEmpty(result, "education", "Education not be empty"); 
     if(!result.hasErrors()){ 
      userList.add(user); 
      res.setStatus("SUCCESS"); 
      res.setResult(userList); 
     }else{ 
      res.setStatus("FAIL"); 
      res.setResult(result.getAllErrors()); 
     } 

     return res; 
    } 

} 

我JsonResponse.java是,

package com.tps.jsonTest.service; 

public class JsonResponse { 
    private String status = null; 
    private Object result = null; 
    public String getStatus() { 
     return status; 
    } 
    public void setStatus(String status) { 
     this.status = status; 
    } 
    public Object getResult() { 
     return result; 
    } 
    public void setResult(Object result) { 
     System.out.println("Result : "+result.toString()); 
     this.result = result; 
    } 

} 
我用是

和我User.java是,

package com.tps.jsonTest.service; 

public class User { 

    private String name = null; 
    private String education = null; 

    public String getName() { 
     return name; 
    } 
    public void setName(String name) { 
     this.name = name; 
    } 
    public String getEducation() { 
     return education; 
    } 
    public void setEducation(String education) { 
     this.education = education; 
    } 

} 

在我的控制台,

Add user POST method 
Name : Anand 
Education : B.E 
Result : [[email protected]] 

Jar文件,

commons-logging-1.1.1.jar 
jackson-core-asl-1.9.12.jar 
jackson-mapper-asl-1.9.12.jar 
log4j-1.2.9.jar 
servlet-api-2.4.jar 
spring-aop-3.2.2.RELEASE.jar 
spring-beans-3.2.2.RELEASE.jar 
spring-context-3.2.2.RELEASE.jar 
spring-context-support-3.2.2.RELEASE.jar 
spring-core-3.2.2.RELEASE.jar 
spring-expression-3.2.2.RELEASE.jar 
spring-web-3.2.2.RELEASE.jar 
spring-webmvc-3.2.2.RELEASE.jar 

在浏览器中的错误是,

enter image description here

我不能使用jquery解析对象,它会在error.Hope我们的堆栈用户将帮助我。

好的答案肯定赞赏。谢谢。

+0

你能后的图像中的错误?这很难读... – Thihara 2013-04-10 10:40:20

+0

@Thihara'状态:406','抛出错误:undefined'。 – 2013-04-10 10:43:05

+1

你可以尝试设置内容类型为文本/ json – Satya 2013-04-10 10:43:52

回答

0

既然你做了POST,那么你的数据不应该是查询字符串格式。改为传递data参数的json对象。

data:{name: name, 
     education: education} 
+0

没有限制,您不能传递POST请求的url参数。 – Akshay 2013-04-20 19:35:28

1

您的问题是请求的内容类型不可接受。

您的ajax调用没有指定dataType,所以jQuery推断基于url扩展的响应应该是内容类型text/html,但您的服务器不知道如何将pojo转换为html!

解决方案应该是简单地将dataType='json'添加到您的ajax调用中。

希望这会有所帮助。

3

这是Spring 3.2.2或3.2.3或3.2.4中的一个问题。我已经在Spring 3.0.0和Spring 3.1.4中尝试过相同的例子,它工作正常。所以改变春天的罐子,试试看。

问候 马杜

+0

是的 - 我正在下载文件没有麻烦,直到我试图从3.1.4升级到4.0.0。降级到3.2.0也失败了。我将试着弄清楚是否还有其他需要改变的东西。 – Steve 2014-01-08 12:32:11

2

我有同样的问题。我正在使用Spring 3.2和UrlBasedViewResolver。

对于所有的ajax调用它给了406.我试着改变头,dataType所有上述解决方案,但没有任何工作。然后我发现杰克逊罐子丢失了。 我在2个罐子下面添加了,它开始适合我。

杰克逊核心ASL-1.9.4.jar 杰克逊映射器-ASL-1.9.4.jar