HTTP POST 提交问题
最近用http+post方式实现了系统间数据交互的需求.
{ Name : 'John Smith', Age: 23}
{"siteId":"ZHAN20160329TDLXJND144649","apiSecret":"userid123","workNumber":"FJ-8006-160912-1715-00001","fluetype":"2","apiKey":"yyxt"}
方法名称:appScanBuildingData请求:json字符串形式,最外层用data包裹
data={"alarmDetail":[{"address":"中国","cgi":"CGI0"},{"address":"米国","cgi":"CGI1"},{"address":"日本","cgi":"CGI2"}],"areaCode":"350723","cellNumber":"1599999","cityCode":"350723","lat":"232.545","lon":"98.233","workNO":"ZB33000333337"}
原因在于Content-Type 中application/x-www-form-urlencoded 和application/json的设置问题, 他们所代表传输的数据格式不同.
POST http://www.example.com HTTP/1.1Content-Type: application/x-www-form-urlencoded;charset=utf-8title=test&sub%5B%5D=1&sub%5B%5D=2&sub%5B%5D=3
- 当以application/json的content-type传送数据,被传送的对象只需被json序列化。
消息主体中的格式
{ Name : 'John Smith', Age: 23}
- 当以application/x-www-form-urlencoded的方式传送数据。请求的内容需要以..=..&..=..的格式提交,在请求体内内容将会以”&”和“ = ”进行拆分。
Name=John+Smith&Age=23
- application/json请求时,Springmvc可以直接处理转换为对象.
- application/x-www-form-urlencoded方式传输,后台接收时候可以采用
String data = request.getParameter("data"); 这样的方式来接受json格式的数据.然后在转为Object使用:AlarmInfo vo=null;vo=JSONObject.parseObject(data, AlarmInfo.class);
data={"alarmDetail":[{"address":"中国","cgi":"CGI0"},{"address":"米国","cgi":"CGI1"},{"address":"日本","cgi":"CGI2"}],"areaCode":"350723","cellNumber":"1599999","cityCode":"350723","lat":"232.545","lon":"98.233","workNO":"ZB33000333337"}
$.ajax({url: "mydomain.com/url",type: "POST",dataType: "xml/html/script/json", // expected format for responsecontentType: "application/json", // send as JSONdata: $.param( $("Element or Expression") ), //或者采取其他$()的方法处理数据(serializearray())- complete: function() {
//called when complete},success: function() {//called when successful},error: function() {//called when there is an error},});
$.ajax({})参数中设置processData = true(这也是默认,可省略)。
/* dataToSend为Object类型的表单数据,否则jQuery会抛出异常 */$.ajax({method: 'POST',url: '...',data: dataToSend,contentType: 'application/x-www-form-urlencoded', // 可省略processData: true, // 可省略success: function() {...}});注意:若采用GET方式,则将method改为GET即可,不需要在url后面加上数据。
<form name="ajaxform" id="ajaxform" action="ajax-form-submit.php" method="POST">First Name: <input type="text" name="fname" value =""/> <br/>Last Name: <input type="text" name="lname" value ="" /> <br/>Email : <input type="text" name="email" value=""/> <br/></form>
$("#ajaxform").submit(function(e){var postData = $(this).serializeArray();var formURL = $(this).attr("action");$.ajax({url : formURL,type: "POST",data : postData,contentType: 'application/json',success:function(data, textStatus, jqXHR){},error: function(jqXHR, textStatus, errorThrown){}});e.preventDefault(); //STOP default action});$("#ajaxform").submit(); //SUBMIT FORM
{"fname":"Ravi","lname":"Shanker","email":"xx@xxx.com"}
- $(selector).serialize() 序列表表格内容为字符串,用于 Ajax 请求。可以对整个form,也可以只针对某部分。
$('#form').submit(function(event){event.preventDefault();$.ajax({url:' ',type:'post',data:$("form").serialize(),}
- $(selector).serializeArray()
serializeArray() 方法序列化表单元素(类似 .serialize() 方法),返回 JSON 数据结构数据。
注意:此方法返回的是 JSON 对象而非 JSON 字符串。需要使用插件或者第三方库进行字符串化操作。
返回的 JSON 对象是由一个对象数组组成的,其中每个对象包含一个或两个名值对 —— name 参数和 value 参数(如果 value 不为空的话)。举例来说:
[
{name: 'firstname', value: 'Hello'},
{name: 'lastname', value: 'World'},
{name: 'alias'}, // 值为空
]
.serializeArray() 方法使用了 W3C 关于 successful controls(有效控件) 的标准来检测哪些元素应当包括在内。特别说明,元素不能被禁用(禁用的元素不会被包括在内),并且元素应当有含有 name 属性。提交按钮的值也不会被序列化。文件选择元素的数据也不会被序列化。
该方法可以对已选择单独表单元素的对象进行操作,比如 <input>, <textarea>, 和 <select>。不过,更方便的方法是,直接选择 <form> 标签自身来进行序列化操作。
$("form").submit(function() {console.log($(this).serializeArray());return false;});上面的代码产生下面的数据结构(假设浏览器支持 console.log):[{name: avalue: 1},{name: bvalue: 2},{name: cvalue: 3},{name: dvalue: 4},{name: evalue: 5}]
- $.params() $.param()方法是serialize()方法的核心,用来对一个数组或对象按照key/value进行序列化。
序列化一个 key/value 对象:
var params = { width:1900, height:1200 };
var str = jQuery.param(params);
$("#results").text(str);结果:
width=1680&height=1050单个对象可以才用JSON.parse()和JSON.stringify()处理1.parse 用于从一个字符串中解析出json 对象。例如
var str='{"name":"cpf","age":"23"}'
经 JSON.parse(str) 得到:
Object: age:"23"
name:"cpf"
_proto_:Object
ps:单引号写在{}外,每个属性都必须双引号,否则会抛出异常 2.stringify用于从一个对象解析出字符串,例如
var a={a:1,b:2}
经 JSON.stringify(a)得到:
“{“a”:1,"b":2}”
HTTP POST 提交问题的更多相关文章
- 网页提交中文到WEB容器的经历了些什么过程....
先准备一个网页 <html><meta http-equiv="Content-Type" content="text/html; charset=gb ...
- 探索ASP.NET MVC5系列之~~~4.模型篇---包含模型常用特性和过度提交防御
其实任何资料里面的任何知识点都无所谓,都是不重要的,重要的是学习方法,自行摸索的过程(不妥之处欢迎指正) 汇总:http://www.cnblogs.com/dunitian/p/4822808.ht ...
- 12、Struts2表单重复提交
什么是表单重复提交 表单的重复提交: 若刷新表单页面, 再提交表单不算重复提交. 在不刷新表单页面的前提下: 多次点击提交按钮 已经提交成功, 按 "回退" 之后, 再点击 &qu ...
- javascript表单的Ajax 提交插件的使用
Ajax 提交插件 form.js 表单的下载地址:官方网站:http://malsup.com/jquery/form/ form.js 插件有两个核心方法:ajaxForm()和ajaxSubmi ...
- 如何避免git每次提交都输入密码
在ubuntu系统中,如何避免git每次提交都输入用户名和密码?操作步聚如下:1: cd 回车: 进入当前用户目录下:2: vim .git-credentials (如果没有安装vim 用其它编辑器 ...
- 登录(ajax提交数据和后台校验)
1.前台ajax数据提交 <form id="login_form" action="" method="POST"> < ...
- from表单提交数据之后,后台对象接受不到值
如果SSH框架下,前段页面通过from表单提交数据之后,在后台对象显示空值,也就是接收不到值得情况下.首先保证前段输入框有值,这个可以在提交的时候用jQuery的id或者name选择器alert弹出测 ...
- git提交项目到已存在的远程分支
今天想提交项目到github的远程分支上,那个远程分支是之前就创建好的,而我的本地关联分支还没创建. 之前从未用github提交到远程分支过,弄了半个钟,看了几篇博文,终于折腾出来.现在把步骤整理 ...
- Form 表单提交参数
今天因为要额外提交参数数组性的参数给form传到后台而苦恼了半天,结果发现,只需要在form表单对应的字段html空间中定义name = 后台参数名 的属性就ok了. 后台本来是只有模型参数的,但是后 ...
- 让ASP.NET接受有“潜在危险”的提交
什么是有“潜在危险”的提交?马上动手写个简单的例子: 用Visual Studio创建一个空白的ASP.NET MVC程序,一切默认即可,添加一个空白的HomeController,增加一个Ind ...
随机推荐
- 一维码生成 c# winform GUI
最近看到同事小红在做一维码,感觉挺好玩,于是就在网上找了一个例子来玩玩. 下面的代码均为网上的代码,做了一些整理,但是忘记了出处,原作者看到可以提醒我,谢谢. 首先,一维码的相关知识可以先百度一下:h ...
- VS 2015 ,与Github的小问题笔记
2016.10.15 1:从Git.OSChina(Github)上,下载的项目代码 在配置完Remote Url后只能提取数据,却无法拉取原因. 原因:未采用Remote分支创建本地分支. 决解: ...
- Draw_extend使用OpenGL显示数据点
//alter load_map.dev //safety verion 2016/1/12 #include <iostream> #include <fstream> #i ...
- Qt for Android开发Android应用时的各种错误汇总(此片博文不成熟,请大家略过)
“Qt for Android真的很脆弱,项目能跑起来靠的是奇迹,跑不起来,各种报错才是正常...” 问题一:Qt for Android编译不过:make (e=2): 系统找不到指定的文件. 之前 ...
- Intent和IntentFilter详解
Intent用于启动Activity,Service, 以及BroadcastReceiver三种组件, 同时还是组件之间通信的重要媒介. 使用Intent启动组件的优势1, Intent为组件的启动 ...
- 《深入浅出Node.js》第8章 构建Web应用
@by Ruth92(转载请注明出处) 第8章 构建Web应用 一.基础功能 请求方法:GET.POST.HEAD.DELETE.PUT.CONNECT GET /path?foo=bar HTTP/ ...
- Oracle expdp按分区导出生成参数文件
使用dba_tab_partitions视图获得每个分区的参数文件内容,使用chr(10)分行 select 'content=data_only'||chr(10)|| 'directory=dat ...
- eclipse导入项目前面有感叹号
1.项目上右击---build path---Config..----Libra----
- Android之动态申请权限(API23以上需求)
API 23之前的版本都是自动获取权限,而从 Android 6.0 开始添加了权限申请的需求,更加安全. 这里以单个存储权限为例: · 在 Manifest 中添加访问权限:(只需设置可写,因为可写 ...
- 【转载】oracle dbms_metadata.get_ddl的使用方法总结
转自:http://www.jb51.net/article/39715.htm dbms_metadata.get_ddl()用于获取对象的ddl,其具体用法如下. 注意:在sqlplus里,为了更 ...