`

关于XMLHttpRequest.open()设置提交方式(POST,GET)

    博客分类:
  • Ajax
阅读更多
众所周知XMLHttpRequest的open()方法里的第一个参数是用来设置向服务器提交的方式,这是绝对的吗?不一定哦,看看下面的代码。代码片断如下:
function simpleStrSubmit() {
var xmlReqFile = createXMLReqFile();
xmlHttp.open("GET","ProcessServlet",true);//指定GET方式提交,其中ProcessServlet是一个Servlet
xmlHttp.onreadystatechange = processRequest;//回调函数
xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
xmlHttp.send("xml="+xmlReqFile);
}
问题:open方法的第一个参数不论写"GET"或是"POST",在ProcessServlet里都是调用的doPost方法??这是为什么?为什么不调用doGet方法???
答案:按照哪种方式提交不是由open()方法的第一个参数完全决定的,还与send()方法有关。
      一、当open()方法里指定的是GET,并且 1、send()方法的参数是""或者null,跟踪代码可以知道调用了Servlet中的doGet方法   2、send()方法的参数是地址重写的方式,或者就是一个字符串,都调用doPost方法,例如:xmlHttp.open("GET","ProcessServlet?choose="+document.getElementById("choosejsfile").value, true);//open里调用GET方法。
   xmlHttp.send("aaa=dd");            //a
    xmlHttp.send("paramTest");    //b
    xmlHttp.send("     ");                    //c
    xmlHttp.send(null);                      //d
    xmlHttp.send(""); //e
对于a、b、c、d、e五中send()函数,只有d和e会调用doGet方法,a、b、c三种方式均调用 doPost方法。
      二、当open()方法里指定的是POST,则对于以上5种send()函数,服务器均会调用doPost方法。所以使用哪种方式提交是由open方法和send方法共同决定的。

kimmking 2008-07-30 这个问题其实是http请求的报文格式的问题。
1、如果用GET,是没有报文体的,只有头部,数据应该在GET url?xxxxxxx 报头的末尾是两个CRLF,即GET的情况下,出来url本身是不能直接send数据的。("url?参数"的大小限制是2048B),即GET的使用范围是小数据量的文本数据。 
2、如果是POST,则可以把要POST的数据加到两个CRLF后。此时常见有两种格式:(1)、application/x-www-form-urlencoded 这个是把数据的name和value按照a=1&b=2的格式拼接成一个串,然后放在报文体中的。一般只能传递字符型数据。 (2)、multipart/form-data 使用一个特殊的【42位(我忘了,大概是)长的以10几个-开头和一组随机16进制数字+表示浏览器相关的数字表示】的分隔符,来分割报文体中的各个数据段,一般是name,然后两个CRLF,接着是二进制数据。服务器端上传组件就是直接按照这种方式来分割出数据和文件的。
考虑到这些情况就可以方便的模拟表单了。 (个人看法)综上,只有是POST方法时,才能传递URL+参数外的数据,XHR明显是考虑到了这一点。当send的数据存在时,自动使用POST。

分享到:
评论

相关推荐

    ajax中send的用法

    Ajax中send方法参数的使用 一般情况下,使用Ajax提交的参数多是些简单的字符串,可以直接使用GET方法将要提交的参数写到... 需要注意的是根据提交方式的不同,两种提交方式分别调用后台的doGet方法和doPost方法。

    XMLHttpRequest

    常用的有get post url:请求服务器的地址。 isAnsy:是否是异步,不写该参数默认是异步 true。 2.send(var data):没有返回值 作用:向服务器发送请求 参数:data.请求正文,请求数据。 事件处理器:指向一个...

    深入理解Ajax的get和post请求

    xhr.open("get", "GetTime.ashx?name= Mr靖", true); //3.让get请求不从浏览器获取缓存数据 xhr.setRequestHeader("If-Modified-Since","0"); //3.设置回调函数 xhr.onreadystatechange = fun

    AJAX XMLHttpRequest对象创建使用详解

    创建XMLHttpRequest对象 XMLHttpRequest是AJAX的基础。 所有现代浏览器(IE7+、Firefox、Chrome、Safari以及Opera)均内建XMLHttpRequest对象。...post提交方式,必须将Content-Type请求消息头更改为 application/x-www

    JavaScript跨域请求库XDomain.zip

    With jQuery $.ajax (and subsequently $.get, $.post) With Angular $http service Cross domain XHR just magically works No need to modify the server code No need to use IE's silly XDomainRequest...

    简单的PHP+MySQL+AJAX留言板实例

    request.open("POST", url, true); request.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); request.send(poststr); request.onreadystatechange = updatePage; } function ...

    实验五 AJAX开发及JSP验证码

    四、实验内容 1.在实验四基础上使用AJAX技术实现异步登录功能。(40分) Ajax异步的特点为:多个事件并行发生,事件互不影响,请求之后,不刷新... send():发送请求,如果是post提交方式,send("参数名=参数值");

    Ajax最简单例子Demo

    Ajax最简单例子,一个例子让你明白Ajax原理,XMLHttpRequest原理 ... function createRequest(url) { ... if (window.XMLHttpRequest) { // ... http_request.open('POST', url, false); http_request.send(); }

    基于js原生和ajax的get和post方法以及jsonp的原生写法实例

    xhr.open("get","http://localhost/ajax2/test2.php?username="+username.value+"&pwd="+pwd2.value,true); xhr.send(); xhr.onreadystatechange = function(){ if (xhr.readyState == 4) { if (xhr.status>=200 && ...

    电影购票系统(包含接口文件、微信小程序、web前端、web管理端、SQL文件)

    创建XMLHttpRequest实例,使用open()方法,包含请求(post、get)、url地址和是否异步执行操作,使用send()方法发送,最后使用在onreadystatechange回调函数访问成功后获取数据,通过JSON.parse()方式解析数据,最后...

    Ajax课件学习(免费)

    4、当向send()方法提供参数时,要确保open()中指定的方法是POST,如果没有数据作为请求体的一部分发送,则使用null. 3.2.4.4setRequestHeader(header,value) 1、当浏览器向服务器请求页面时,它会伴随这个请求发送...

    Ajax技术课件,保密资料下载

    xhr.open("POST|GET",url); 传输数据 xhr.send(); input.onchange=function(){ alert("xxxx"); } input.onclick 3 xhr相关属性 xhr.readyState 数字类型的属性,浏览器为这个属性赋值 0 xhr初始...

    用 ajax + asp.net 采集文章

    this.XmlHttp.open(this.Method, this.RequestUrl, this.IsAsyn); if (this.Method.toLowerCase() == "post") { this.XmlHttp.setRequestHeader("Content-Type", this.ContentType); } this.XmlHttp.send(this...

    《javaScrip开发技术大全》源代码

    • sample11.htm 以毫秒表示法设置和返回日期对象的毫秒表示法 • sample12.htm 获得当前时间的毫秒表示 • sample13.htm 获得指定时间的毫秒表示 • sample14.htm 日期之差 • ...

    RESTful:带有节点的RESTful Web系统构建

    RESTful的带有节点的RESTful Web系统构建节点获取URL数据官方API参考/* 测试代码 * POST请求 var xmlhttp = new XMLHttpRequest(); var user = 'name=mohit&password=password4&profession=teacher&id=4'; xmlhttp....

    DOM和XMLHttpRequest对象的属性和方法整理

    标准XMLHttpRequest操作 方法 描述 abort() ...open(String “method”, String ”url, ...建立的服务器的调用,method参数可以是post、get或put。url参数可以是相对url或绝对url。这个方法还包括

    XML轻松学习手册--XML肯定是未来的发展趋势,不论是网页设计师还是网络程序员,都应该及时学习和了解

    XML越来越热,关于XML的基础教程网络上也随处可见。可是一大堆的概念和术语往往让人望而生畏,很多朋友问我:XML到底有什么用,我们是否需要学习它?我想就我个人学习过程的心得和经验,写一篇比较全面的介绍文章。...

    Spring MVC+ajax进行信息验证的方法

    本文是一个ajax结合Spring MVC使用的入门,首先我们来了解一下什么是Ajax AJAX 不是新的编程语言,而是一种使用现有标准的新方法。... open方法里面的参数中,method代表请求的类型(GET/POST), u

    在VC中使用XMLHTTP

    xmlrequest->open("POST", _bstr_t("http://211.157.102.21/member/logon.asp"),vFalse,vNull,vNull); xmlrequest->setRequestHeader("Content-Type:","application/x-www-form-urlencoded"); _bstr_t ...

    PHP培训教程之AJAX技术.docx

    open("method","URL")建立对器的调用,个参数HTTP请求可以为GET,POST或任何器所支持的您想调用的。 第二个参数请求页面的URL。 send()方法,具体请求 abort()方法,停止当前请求! readyState属性请求的状态有5个...

Global site tag (gtag.js) - Google Analytics