Ajax发送POST请求的心路历程

好多年前就在项目中用ajax实现了页面部分数据的发送,当时用的是GET方法。

这次用POST方法实现同样的功能,竟然花费了不少的时间!

① 关于JQuery ajax的配置项说明

当前内容已被隐藏,您需要登录才能查看

配置请求数据类型为:

contentType: "application/json;charset=utf-8",额……问题来了。

② 415 Unsupported Media Type

这是响应的错误码,直译就是不支持的媒体类型。既然是服务器响应的,那就是说服务器不支持媒体类型。

我配置的数据类型为json,用的Spring MVC,那就是需要增加Spring的json数据支持。

查询对比了一下,发现jackson库是JSON封装解析效率比较高,开发比较活跃的库。

③ 下载jackson库

从好几个mvn仓库中下载的版本竟然是错误的,弄的我差点开始怀疑人生。

最后还是从官网连接的仓库中下载了正确的版本。

当前内容已被隐藏,您需要登录才能查看

④ 400 Bad Request

新的错误来了,服务器响应“坏的请求”。

服务器的报错信息如下:Unrecognized token 'name': was expecting ('true', 'false' or 'null')

从浏览器抓包如下:

当前内容已被隐藏,您需要登录才能查看

找到原因了,就是说服务器根据请求消息携带的媒体类型json做好了解析JSON数据的准备,然而找不到相关的数据键,因为事实上浏览器发出去的请求确实不是JSON格式的数据啊。

我是这么填写的数据:

data : {'name':'test','passwd':'123456'},

就是说这么写看起来是JSON格式,事实上不是。那就明确一下数据格式吧,改动如下:

当前内容已被隐藏,您需要登录才能查看

哈哈,终于前后台打通了~~~~

⑤ 完整的JS代码如下,友情提示:纸上得来终觉浅,绝知此事要躬行。

 
当前内容已被隐藏,您需要登录才能查看
 

 后记:

想让返回数据类型更加丰富,修改dataType为“json”。

结果发现无法跳转到success的回调函数。

既然不能调用success,那就看error回调函数吧:

当前内容已被隐藏,您需要登录才能查看

最终原因如下:因为服务器返回的数据格式不是标准json,所以无法进入success。

 

所属分类:前端

 0条回应

我有话说:
    • 春建童鞋
    • 关注
      • 515796发布
      • 95评论
    ×
    订阅图标按钮