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

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

① 关于JQuery ajax的配置项说明

  1. url : 请求的url
  2. type : http请求消息的方法,例如get,post等。
  3. contentType : http请求消息的数据类型,例如json,text,xml等。
  4. dataType : http响应消息的数据类型,可以不配置。

配置请求数据类型为:

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

② 415 Unsupported Media Type

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

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

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

③ 下载jackson库

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

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

  1. 理论上除了导入jackson库,还需要适当的配置让Spring支持JSON解析。
  2. 但是一个<context:annotation-config />配置就自动的完成了相关配置。
  3. 省事了,也会让人有些疑惑。凡事没有绝对吧。

④ 400 Bad Request

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

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

从浏览器抓包如下:

  1. Request Payload
  2. name=test&passwd=

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

我是这么填写的数据:

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

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

  1. data : JSON.stringify({'name':'test','passwd':''}),

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

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

  1. $(document).ready(function() {
  2. $("#submitBtn").click(function(e) {
  3. e.preventDefault();
  4. var obj = $(this);
  5. var name = $("input[name='loginname']").val();
  6. var passwd = $("input[name='loginpasswd']").val();
  7. $.ajax({
  8. url : "http://localhost:8080/star/loginCheck/",
  9. type : "POST",
  10. contentType: "application/json;charset=utf-8",
  11. data : JSON.stringify({'name':name,'passwd':passwd}),
  12. dataType : "text",
  13. success : function(result) {
  14. if (result == "success") {
  15. obj.parents('form').submit();
  16. } else {
  17. }
  18. },
  19. error:function(msg){
  20. $(".notice").html('Error:'+msg);
  21. }
  22. })
  23. return false;
  24. })
  25. });
  26. </script>

后记:

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

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

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

  1. Error:SyntaxError: JSON.parse: unexpected character at line column of the JSON data

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

Ajax发送POST请求的心路历程的更多相关文章

  1. Ajax发送Post请求

    Ajax发送post请求与发送get请求大致类似.以下看详细实例.首先看JSP显示页面: <form action="servlet/LoginServlet" method ...

  2. 使用Ajax发送http请求(get&post请求)

    本文最初发表于博客园,并在GitHub上持续更新前端的系列文章.欢迎在GitHub上关注我,一起入门和进阶前端. 以下是正文. 同步和异步 同步和异步的概念 同步:必须等待前面的任务完成,才能继续后面 ...

  3. AJAX发送PUT请求引发的血案

    如果直接发送ajax=put形式的请求      是拿不到请求体中的数据的.           Tomcat:              1.将请求体中的数据,封装一个map             ...

  4. AJAX的来龙去脉(由来)-如何被封装出来的--ajax发送异步请求(四步操作)

    <黑马程序员_超全面的JavaWeb视频教程vedio\JavaWeb视频教程_day23_ajax> \JavaWeb视频教程_day23_ajax\day23ajax_avi\14.打 ...

  5. Ajax发送POST请求对数据的封装

    Ajax发送POST请求把数据到后端后,后端收到数据并解析出来 示列一: Ajax发送请求,这里主要是发送一个数组的数据类型到后端,如果没有先把数组进行格式化成字符串的话,后端就收了就是一个字符串类型 ...

  6. 原生JS实现ajax 发送post请求

    1. [代码]原生JS实现ajax 发送post请求 <script> var oStr = ''; var postData = {}; var oAjax = null; //post ...

  7. IT兄弟连 JavaWeb教程 使用AJAX发送POST请求并获取响应

    POST请求用于向服务器发送应该被保存的数据,因此POST请求天然比GET请求多需要一份需要被保存的数据.那么这些数据应该放在何处呢?毕竟,我们的open()方法接收的三个参数都没有合适的位置. 答案 ...

  8. IT兄弟连 JavaWeb教程 使用AJAX发送GET请求并获取响应

    GET请求用于获取数据,有时候我们需要获取的数据需要通过"查询参数"进行定位,在这种情况下,我们会将查询参数追加到URL的末尾,令服务器解析. 使用Ajax发送GET请求非常简单, ...

  9. Ajax发送XML请求案例

    Ajax发送XML请求需求: 根据输入的国家,输出这些国家下面的城市. 如果请求参数较多,而且请求参数的结构关系复杂,则可以考虑发送XML请求.XML请求的实质还是POST请求,只是在发送请求的客户端 ...

随机推荐

  1. 【fedora】设置中文为默认语言

    安装Fedora时,界面语言是英语,手动安装简体中文语言包: 1.打开终端,执行yum install system-config-language命令来安装语言套件: 2.然后执行system-co ...

  2. Tomcat内存溢出解决办法

    使用Java程序从数据库中查询大量的数据时出现异常:java.lang.OutOfMemoryError: Java heap space在JVM中如果98%的时间是用于GC且可用的 Heap siz ...

  3. linux下网卡启动、配置

    步骤1.配置/etc/sysconfig/network-scripts/ifcfg-eth0 里的文件. ifcfg-eth0的配置详情:[root@localhost ~]# vim /etc/s ...

  4. java总结第二次(剩余内容)//类和对象1

    7.成员变量和局部变量 成员变量:在类中定义,用来描述对象将要有什么 局部变量:在类的方法中定义,在方法中保存临时数据 区别:作用域不同 局部变量的作用域仅限于定义它的方法 成员变量的作用域在整个类内 ...

  5. jdk8飞行记录器配置

    jdk8提供了jmc工具,应该比visualvm厉害吧 下面贴一份tomcat的配置,自己留个备份,把下面的内容粘贴到tomcat setenv.sh就可以了 nowday=`date +%Y%m%d ...

  6. HDU 4405:Aeroplane chess(概率DP入门)

    http://acm.split.hdu.edu.cn/showproblem.php?pid=4405 Aeroplane chess Problem Description   Hzz loves ...

  7. python正则表达式之元字符介绍

    python中元字符及其含义如下: 元字符 含义 . 匹配除换行符以外的任意一个字符 ^ 匹配行首 $ 匹配行尾 ? 重复匹配0次或1次 * 重复匹配0次或更多次 + 重复匹配1次或更多次 {n,} ...

  8. 杭电1020-Encoding

    Problem Description Given a string containing only 'A' - 'Z', we could encode it using the following ...

  9. CallableAndFuture

    Callable和Runnable的区别如下: I    Callable定义的方法是call,而Runnable定义的方法是run. II   Callable的call方法可以有返回值,而Runn ...

  10. 浪首登录浮层增加收藏入口项目学到的几点知识-IE7 bug、relatedTarget、字符串换行

    这两天做这个项目略有收获,记录如下: 1. 项目中有个bug,在IE7中登录成功时下拉菜单没有展开的情况下总有个残影在页面中,如下图所示: 通过多种方法都没有解决,后来才知道原来是在IE中displa ...