ajax get与post区别
问题:我需要通过ajax请求向后台传上万个字符的参数,v_xmlHttp.open("post",v_url,isAsy);(v_xmlHttp为XMLHttpRequest对象),这样虽然请求方式设置的是“post”,但是实质上还是通过get方式请求的。我传的参数长度如果比较小(比如几十个字符),那么没有问题,可以正常处理;但是如果我传的参数太长(如上万个字符),那么ajax会失效(根本不会去执行请求的后台方法,会直接忽略ajax请求)。如果要设置ajax为post传参,那么需要注意一下两点:
1.v_xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");//必须要这样设置请求头
2.v_xmlHttp.send(context);//context为参数,格式如:name=alan&age=11 一定不能将参数写在url上边,如果通过url传参,那么还是会认为是get方式的请求。
另注:
1:GET访问 浏览器 认为 是等幂的 就是 一个相同的URL 只有一个结果[相同是指 整个URL字符串完全匹配] 所以 第二次访问的时候 如果 URL字符串没变化 浏览器是 直接拿出了第一次访问的结果 POST则 认为是一个 变动性 访问 (浏览器 认为 POST的提交 必定是 有改变的) 防止 GET 的 等幂 访问 就在URL后面加上 ?+new Date();,[总之就是使每次访问的URL字符串不一样的] 设计WEB页面的时候 也应该遵守这个原则 2:一.谈Ajax的Get和Post的区别 Get方式: 用get方式可传送简单数据,但大小一般限制在1KB下,数据追加到url中发送(http的header传送),也就是说,浏览器将各个表单字段元素及其数据按照URL参数的格式附加在请求行中的资源路径后面。另外最重要的一点是,它会被客户端的浏览器缓存起来,那么,别人就可以从浏览器的历史记录中,读取到此客户的数据,比如帐号和密码等。因此,在某些情况下,get方法会带来严重的安全性问题。 Post方式: 当使用POST方式时,浏览器把各表单字段元素及其数据作为HTTP消息的实体内容发送给Web服务器,而不是作为URL地址的参数进行传递,使用POST方式传递的数据量要比使用GET方式传送的数据量大的多。 总之,GET方式传送数据量小,处理效率高,安全性低,会被缓存,而POST反之。
别人的文章:ajax碰到请求url过长的问题! ajax中get和post的区别一个超大文本框textarea里面有大量数据,ajax通过URL请求service返回结果,URL里面包含了各种参数,当然也包含之前的超大文本框的内容。 function getJsonData(url) 网上google发现解决办法: function getJsonData(url,para) ================================ Ajax中的get和post两种请求方式的异同2008年10月04日 星期六 下午 02:37分析两种提交方式的异同 Ajax中我们经常用到get和post请求.那么什么时候用get请求,什么时候用post方式请求呢? 在做回答前我们首先要了解get和post的区别. 1、 get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到。post是通过HTTP post机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址。用户看不到这个过程。 2、 对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据。两种方式的参数都可以用Request来获得。 3、get传送的数据量较小,不能大于2KB。post传送的数据量较大,一般被默认为不受限制。但理论上,因服务器的不同而异. 4、get安全性非常低,post安全性较高。 5、 <form method="get" action="a.asp?b=b">跟<form method="get" action="a.asp">是一样的,也就是说,method为get时action页面后边带的参数列表会被忽视;而<form method="post" action="a.asp?b=b">跟<form method="post" action="a.asp">是不一样的。 另外 通过以上的说明,现在我们大致了解了什么时候用get什么时候用post方式了吧,对!当我们在提交表单的时候我们通常用post方式,当我们要传送一个较大的数据文件时,需要用post。当传递的值只需用参数方式(这个值不大于2KB)的时候,用get方式即可。 现在我们再看看通过URL发送请求时,get方式和post方式的区别。用下面的例子可以很容易的看到同样的数据通过GET和POST来发送的区别,发送的数据是 username=张三 :
POST 方式: POST / HTTP/1.1 username=%E5%BC%A0%E4%B8%89 区别就是一个在 URL 请求里面附带了表单参数和值,一个是在 HTTP 请求的消息实体中。 比较一下上面的两段文字,我们会发现 GET 方式把表单内容放在前面的请求头中,而 POST 则把这些内容放在请求的主体中了,同时 POST 中把请求的 Content-Type 头设置为 application/x-www-form-urlencoded. 而发送的正文都是一样的,可以这样来构造一个表单提交正文: 注: encodeURIComponent 返回一个包含了 charstring 内容的新的 String 对象(Unicode 格式), 所有空格、标点、重音符号以及其他非 ASCII 字符都用 %xx 编码代替,其中 xx 等于表示该字符的十六进制数。 例如,空格返回的是 "%20" 。 字符的值大于 255 的用 %uxxxx 格式存储。参见 JavaScript 的 encodeURIComponent() 方法. 在了解了上面的内容后我们现在用ajax的XMLHttpRequest对象向服务器分别用GET和POST方式发送一些数据。 GET 方式
var postContent ="name=" + encodeURIComponent("xiaocheng") + "&email=" + encodeURIComponent("xiaochengf_21@yahoo.com.cn"); 使用Post方式需注意: xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); abc&sex=man&age=18以及var name=?abc&sex=man&age=18的写法都是错误的; 原文:http://www.cnblogs.com/jiangchongwei/archive/2009/06/13/1502453.html 参考:http://m.blog.csdn.net/blog/lifan_3a/8824353 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |