GET和POST(ajax request, form submit, 上传文件)
2015-02-10 23:46
411 查看
如果对http请求报文还不是很了解的,可以查看点击打开链接
(一)、用html中的form来发送请求。
一、使用get方法
url,表示form的action值。
form的元素名/值将作为url的queryString发送请求,如:
url:http://ip:port/test/rest/http/htmlGetMethod
queryString:elem=find
如果url本来带有queryString,则会被from的元素覆盖掉,如:
二、使用post方法
1、form的enctype不设置值、或=''、或='application/x-www-form-urlencoded'
在这种情况下,enctype的值都为application/x-www-form-urlencoded
form的元素名/值放在请求体(request-body)中发送,如:
contentLength:20
contentType:application/x-www-form-urlencoded
elem=find&firstFile=
2、form的enctype='multipart/form-data'
发送的请求头部和请求体为:
content-type:multipart/form-data; boundary=---------------------------257881762317299
content-length:68568
-----------------------------257881762317299
Content-Disposition: form-data; name="elem"
find
-----------------------------257881762317299
Content-Disposition: form-data; name="firstFile"; filename="test.doc"
Content-Type: application/msword
<test.doc的内容>
-----------------------------257881762317299--
(其中请求头部有boundary=---------------------------257881762317299,这表示请求体中各数据之间的边界,而---------------------------257881762317299--表示请求体的数据已结束,filename表示上传文件的名称,Content-Type表示文件的类型,接下来空一行,接着就是文件的内容。)
Content-Type的可选值:
text:用于标准化地表示的文本信息,文本消息可以是多种字符集和或者多种格式的,默认为text/plain;
multipart:用于连接消息体的多个部分构成一个消息,这些部分可以是不同类型的数据,默认为multipart/mixed;
application:用于传输应用程序数据或者二进制数据,默认为application/octet-stream;
message:用于包装一个E-mail消息;
image:用于传输静态图片数据;
audio:用于传输音频或者音声数据;
video:用于传输动态影像数据,可以是与音频编辑在一起的视频数据格式。
(二)、使用jquery发送ajax请求
一、使用get方法
如:
二、使用post方法
如:
accept:*/*
content-type:application/x-www-form-urlencoded; charset=UTF-8
x-requested-with:XMLHttpRequest
accept-language:zh-cn
accept-encoding:gzip, deflate
user-agent:Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)
host:localhost:8088
content-length:7
connection:Keep-Alive
cache-control:no-cache
cookie:JSESSIONID=F5639C1CB2FD03E69713E055B84199E7.tomcat2
a=1&b=3
1、则a=1&b=3作为请求报文的请求体发送请求,
2、请求头多了个属性:x-requested-with:XMLHttpRequest,可以判断出ajax请求为异步请求;如果x-requested-with值为null则判断为同步请求。
此外,jquery也可以上传文件,不过jquery最终也是要使用html的form来上传文件的。
(一)、用html中的form来发送请求。
一、使用get方法
url,表示form的action值。
form的元素名/值将作为url的queryString发送请求,如:
<form id="uploadForm" action="/test/rest/http/htmlGetMethod" enctype="" method="get"> <input type="text" id="elem" name="elem" value="find"/> <input type="submit" value="Submit"/> </form>则,
url:http://ip:port/test/rest/http/htmlGetMethod
queryString:elem=find
如果url本来带有queryString,则会被from的元素覆盖掉,如:
<form id="uploadForm" action="/test/rest/http/htmlGetMethod?v=1234565" enctype="" method="get">虽然url多了v=1234565,但发送请求的url和queryString跟上面是一样的
二、使用post方法
1、form的enctype不设置值、或=''、或='application/x-www-form-urlencoded'
在这种情况下,enctype的值都为application/x-www-form-urlencoded
form的元素名/值放在请求体(request-body)中发送,如:
<form id="uploadForm" action="/test/rest/http/htmlPostMethod?v=sun" enctype="" method="post"> <input type="text" id="elem" name="elem" value="find"/> <input type="file" id="firstFile" name="firstFile"/> <input type="submit" value="Submit"/> </form>发送的请求头部和请求体为:
contentLength:20
contentType:application/x-www-form-urlencoded
elem=find&firstFile=
2、form的enctype='multipart/form-data'
发送的请求头部和请求体为:
content-type:multipart/form-data; boundary=---------------------------257881762317299
content-length:68568
-----------------------------257881762317299
Content-Disposition: form-data; name="elem"
find
-----------------------------257881762317299
Content-Disposition: form-data; name="firstFile"; filename="test.doc"
Content-Type: application/msword
<test.doc的内容>
-----------------------------257881762317299--
(其中请求头部有boundary=---------------------------257881762317299,这表示请求体中各数据之间的边界,而---------------------------257881762317299--表示请求体的数据已结束,filename表示上传文件的名称,Content-Type表示文件的类型,接下来空一行,接着就是文件的内容。)
Content-Type的可选值:
text:用于标准化地表示的文本信息,文本消息可以是多种字符集和或者多种格式的,默认为text/plain;
multipart:用于连接消息体的多个部分构成一个消息,这些部分可以是不同类型的数据,默认为multipart/mixed;
application:用于传输应用程序数据或者二进制数据,默认为application/octet-stream;
message:用于包装一个E-mail消息;
image:用于传输静态图片数据;
audio:用于传输音频或者音声数据;
video:用于传输动态影像数据,可以是与音频编辑在一起的视频数据格式。
(二)、使用jquery发送ajax请求
一、使用get方法
如:
var url = '/test/rest/http/ajaxPostMethod?v=7854'; $.ajax({ url : url, type : 'get', data : {a:1,b:3}, success : function(data, textStatus, jqXHR){ alert("status:" + textStatus + ", jqXHR:" + jqXHR); }, error : function(jqXHR, textStatus, errorThrown){ alert("jqXHR:" + jqXHR + ", status:" + textStatus); } });则data:{a:1,b:3}也将作为url的queryString,相当于url='/test/rest/http/ajaxPostMethod?v=7854&a=1&b=3';
二、使用post方法
如:
var url = '/test/rest/http/ajaxPostMethod?v=7854'; $.ajax({ url : url, type : 'post', data : {a:1,b:3}, success : function(data, textStatus, jqXHR){ alert("status:" + textStatus + ", jqXHR:" + jqXHR); }, error : function(jqXHR, textStatus, errorThrown){ alert("jqXHR:" + jqXHR + ", status:" + textStatus); } });请求头和请求体为:
accept:*/*
content-type:application/x-www-form-urlencoded; charset=UTF-8
x-requested-with:XMLHttpRequest
accept-language:zh-cn
accept-encoding:gzip, deflate
user-agent:Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)
host:localhost:8088
content-length:7
connection:Keep-Alive
cache-control:no-cache
cookie:JSESSIONID=F5639C1CB2FD03E69713E055B84199E7.tomcat2
a=1&b=3
1、则a=1&b=3作为请求报文的请求体发送请求,
2、请求头多了个属性:x-requested-with:XMLHttpRequest,可以判断出ajax请求为异步请求;如果x-requested-with值为null则判断为同步请求。
此外,jquery也可以上传文件,不过jquery最终也是要使用html的form来上传文件的。
相关文章推荐
- struts中post方式上传文件,enctype="multipart/form-data",request.getParameter("file") 是null的问题分析
- Ajax的GET与POST和Ajax文件上传进度条
- struts2开发环境中,enctype="multipart/form-data"上传文件时,request.getInputStream()为null的原因
- AJAX Form POST Request - HTML Form POST/Submit with AJAX
- ajax上传文件,提交表单,使用FormData和XMLHttpRequest提交表单
- form表单使用ajaxsubmit上传文件,并验证
- Android网络通信框架Volley——自定义Request(Get、Post、文件上传)
- ajax上传文件,提交表单,使用FormData和XMLHttpRequest提交表单
- 使用jquery.form插件的ajaxSubmit方法上传文件
- struts2开发环境中,enctype="multipart/form-data"上传文件时,request.getInputStream()为null的原因(转http://topic.csdn.net/u/20101210/11/78454a19-7
- tp5的Request::instance()获取post、get、参数、表单上传的文件
- form.js插件 利用ajaxSubmit上传文件时ie总出现下载提示框
- (转)struts2开发环境中,enctype="multipart/form-data"上传文件时,request.getInputStream()为null
- ASP.NET中Get和Post的用法 Request.QueryString,Request.Form,Request.Params的区别 [转]
- ASP.NET中Get和Post的用法 Request.QueryString,Request.Form,Request.Params的区别 [转]
- [网络收集]form表单提交方式post和get,Request.QueryString,Request.Form
- ASP.NET中Get和Post的用法 Request.QueryString,Request.Form,Request.Params的区别 [转]
- request.getInputStream()读取post传递的xml文件问题
- ASP.NET中Get和Post的用法 Request.QueryString,Request.Form,Request.Params的区别 [转]
- ExtJS中Ext.Ajax.request与form1.getForm().submit的基本区别