springmvc+jquery+ajax 报错 Unexpected token <

王立权 发布于 2015/02/05 15:50
阅读 3K+
收藏 1

不多说,先贴代码

controller

@RequestMapping(value = "/register.json", method = RequestMethod.POST)
public @ResponseBody JsonVo<String> register(@RequestParam("realname") String realname,@RequestParam("email") String email, 
@RequestParam("password") String password,User user){
JsonVo<String> json = new JsonVo<String>();
json.setResult(false);
if (StringUtils.isBlank(realname)){
json.getErrors().put("realname", "用户名不能为空");
}
if (StringUtils.isBlank(email)){
json.getErrors().put("email", "邮箱不能为空");
}
if (StringUtils.isBlank(password)) {
json.getErrors().put("password", "密码不能为空");
} else if (password.length() < 6 && password.length() > 30) {
json.getErrors().put("password", "密码最少6个字符,最多30个字符");
}
if(!StringUtils.isBlank(realname) && !StringUtils.isBlank(email) && !StringUtils.isBlank(password) 
&& password.length() > 6 && password.length() < 30 ){
String md5Password = MD5Util.MD5(password);
user.setEmail(email);
user.setPassword(md5Password);
user.setRealname(realname);
userService.insertUser(user);
json.setResult(true);
}

return json;
}

JsonVo类

package wang.model;
import java.util.HashMap;
import org.codehaus.jackson.map.annotate.JsonSerialize;
import wang.utils.ValidateException;

@JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL)
public class JsonVo<T> {

private boolean result;
private String msg;
private T t;
private HashMap<String, String> errors = new HashMap<String,String>();
public boolean isResult() {
return result;
}

public void setResult(boolean result) {
this.result = result;
}

public String getMsg() {
return msg;
}

public void setMsg(String msg) {
this.msg = msg;
}

public T getT() {
return t;
}


public void setT(T t) {
this.t = t;
}

public HashMap<String, String> getErrors() {
return errors;
}

public void setErrors(HashMap<String, String> errors) {
this.errors = errors;
}

public void check() throws ValidateException {
if (this.getErrors().size() > 0) {
this.setResult(false);
throw new ValidateException("有错误发生");
} else {
this.setResult(true);
}
}
}

前台js

$('#form').submit(function(){
    $.ajax({
         dataType : 'json',
           success  : function(data){
           console.log("ssss");
           console.log(data.result);
           if(data.result){
           swal("Good job!", "您已经注册成功!", "success");
           }else{
           swal("NO!", "注册失败!", "error");
           }
           },
           error: function(XMLHttpRequest, textStatus, errorThrown) {
          alert(XMLHttpRequest.status);
          alert(XMLHttpRequest.readyState);
          alert(textStatus);
          alert(errorThrown);
                       }
        });
    });

提交表单后,debug确定是已经跳转进controller执行完方法了并且返回值了的,但是并没有走success方法,而是走了error方法,依次弹框的结果是,200,4,parsererror,SyntaxError:Unexpected token <

然后跳转到http://localhost:8080/mvcdemo/user/register.json , 页面上只有一行字

{"result":false,"errors":{"realname":"用户名不能为空"}}
这是什么问题,该如何解决?



加载中
0
YueZheng
YueZheng

ajax至少把请求类型写上吧。 type: 'POST'

在error回调里加上一行:console.log(arguments); 看看控制台输出。

王立权
王立权
加不加都不影响的,之前就是加了的,后来见<form>里已经加了,就把它去掉了。console。log没打印出来,说{Object] Arguments
0
大飛
大飛
<bean
class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping">
</bean>
<bean
class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
<property name="messageConverters">
<list>
<bean
class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter" />
</list>
</property>
</bean>




王立权
王立权
试过了,没有用啊
0
王立权
王立权
问题解决了,用ajax异步提交,不要使用submit,使用submit必然会导致页面跳转或者刷新,自然就导致哪些在原来页面条件触发的事件丢失。解决办法,把button按钮类型从submit改为button,去掉form中的action,使用ajax获取表单中的数据,加上url:....,加上data:{key1:value1,key2:value,....}
返回顶部
顶部