跳到主要内容
JackSparrow414
返回

关于web中ajax异步交互学习(二)

本文导航

展开本文导航

正文

今天在写代码的问题:

前台通过ajax和后台的SSM框架进行交互,进行测试时发现,后台已经正常进入controller,并且正常进入对应的方法,也正确的返回了对应的数据,但是,前台ajax总是会进入到error的function里面。

还是老办法,一步一步解决问题。

定位问题:既然每次都进error的function里,那我们就吧error的function的参数打印出来,ajax的error function的参数有三个,分别为:error:function(jqXHR,textStatus,errorThrown)

jQuery AJAX error 回调的 jqXHR、textStatus 与 errorThrown 参数说明

上面为这三个参数的具体含义。

知道这些参数的含义,那么我们就可以在进入error:function的时候把它们在控制台console.log()出来,这里我只打印出来以下4项:

console.log(jqXHR.status);

console.log(jqXHR.readyState);

console.log(jqXHR.responseText);

console.log(jqXHR.statusText);

然后自己又进行了一次测试,这次可以在控制台看到readyState---4,正常,status—200,正常,但是resposeText提示下面这个异常,unexpected token in json at postion 4,后面紧接着一句,parse error。

看这句话意思是后台数据返回前台时json解析出现错误了,去网上找了很多解决方案,大家都是dataType写错了才导致这个异常,可是自己的dataType:“json”没错,这怎么回事?

想了很久,忽然想到,可能action里的方法上没有加@ResponseBody这个注解,一去检查,果然,问题找到了,加上注解就可以正常返回了。

总结:平时responsebody注解没少用,可是自己没有想过他是干嘛用的,其实他就是一个将你返回的数据以json形式返回给前台,当然这里返回的类型不仅仅是String,还有List,map,VO,等等。

但是当我们方法返回的是modelandview时,是不需要这个注解的

最后,感谢这位博主的分享。

2019-3-4更新:

今天在调用ajax时候出现了一些问题,声明了三个全局变量,然后将ajax的结果赋值给这三个全局变量,最后将这三个全局变量当作一个数组中的元素的值,如下图:

AJAX success 回调为变量赋值并用于构建数组的代码

这里的问题是我最终打印数组元素的值,发现本该有值的全局变量为undefined,我在ajax中success:function()明明已经赋值了,为什么还没有呢?原因是,一开始我没有加async属性,它是默认为true的,所以它不会等URL请求完毕,他会直接进入下一步,所以就造成了这种情况,以前遇到过,但是忘记做记录了,特此记录下。


分享本文:

继续阅读本系列

Web 中的 Ajax 异步交互

  1. 关于web中ajax异步交互的学习(一)
  2. 关于web中ajax异步交互学习(二)正在阅读

评论

欢迎提问、纠错和分享经验。发表评论需要登录 GitHub;中英文版本共享评论。

评论仅在正式网站开放。