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

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

① 关于JQuery ajax的配置项说明

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

配置请求数据类型为:

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

② 415 Unsupported Media Type

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

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

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

③ 下载jackson库

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

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

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

④ 400 Bad Request

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

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

从浏览器抓包如下:

 Request Payload
name=test&passwd=

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

我是这么填写的数据:

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

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

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

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

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

     $(document).ready(function() {
$("#submitBtn").click(function(e) {
e.preventDefault();
var obj = $(this);
var name = $("input[name='loginname']").val();
var passwd = $("input[name='loginpasswd']").val();
$.ajax({
url : "http://localhost:8080/star/loginCheck/",
type : "POST",
contentType: "application/json;charset=utf-8",
data : JSON.stringify({'name':name,'passwd':passwd}),
dataType : "text",
success : function(result) {
if (result == "success") {
obj.parents('form').submit();
} else {
}
},
error:function(msg){
$(".notice").html('Error:'+msg);
}
})
return false;
})
});
</script>

后记:

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

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

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

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. JSP-06-使用JDBC操作数据库

    6.1 使用JDBC查询数据 [链接oracle数据库] 具体操作: 1)  将odbc文件拷贝到项目中 Odbc文件所在目录: oracle安装目录下- product – db_1 – jdbc  ...

  2. jQuery操作json数据

    json是一种轻量级数据交换格式,简单的json格式为[{"key1":"value1"},{"key2":"value2&quo ...

  3. javascript中字符串格式json如何转化成json对象

    什么是JSON JSON(JavaScript Object Notation)是一种优美的JavaScript对象创建方法.JSON也是一种轻量级数据交换格式.JSON非常易于人阅读与编写,同时利于 ...

  4. C#下调用C++ SDK的编码常识

    一组编码规范,通过C#调用C++ 自动封装的C# SDK,会发现面向对象思想的重要性. C++ SDK可以使用自动封装工具转换成C# SDK.但需要遵守如下规则: 1.如果需要对C#对象进行判断,则分 ...

  5. 薛非《品悟C-抛弃C程序设计中的谬误与恶习》读后感part1【转】

    薛非<品悟C-抛弃C程序设计中的谬误与恶习>读后感part1 作者:宝贝孙秀楠﹣大连程序员 发表于2012年10月5日由admin 出处:http://sunxiunan.com/?p=2 ...

  6. ADB server didn't ACK的解决方法

    异常信息如下: C:\Users\Administrator>adb devices* daemon not running. starting it now on port 5037 *ADB ...

  7. linux终端快捷键

    tab 补全 ctrl+k 删除此处到末尾所有内容 ctrl+u 删除此处到开始所有内容 ctrl+a 将光标移至开始处 cttl+e 将光标移至结尾 ctrl+l 清屏 ctrl+c 删除整行或停止 ...

  8. 使用 TC 对LInux中vpn 上传下载进行限速(转)

    TC 无需安装,Linux 内核自带 例:将vpn IP地址段192.168.1.0/24 上传下载限速为 5M 将以下内容添加到/etc/ppp/ip-up文件exit 0上面. down=5Mbi ...

  9. 用grunt搭建自动化的web前端开发环境实战教程(详细步骤)

    用grunt搭建自动化的web前端开发环境实战教程(详细步骤) jQuery在使用grunt,bootstrap在使用grunt,百度UEditor在使用grunt,你没有理由不学.不用!前端自动化, ...

  10. 从追MM谈Java的23种设计模式(转)

    从追MM谈Java的23种设计模式    这个是从某个文章转载过来的.但是忘了原文链接.如果知道的,我追加一下. 1.FACTORY-追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西 ...