热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

使用XMLHttpRequest发送POST数据

本文翻译自:SendPOSTdatausingXMLHttpRequestIdliketosendsomedatausinganXMLHttpRequestinJav

本文翻译自:Send POST data using XMLHttpRequest

I'd like to send some data using an XMLHttpRequest in Javascript. 我想使用Javascript中的XMLHttpRequest发送一些数据。

Say I have the following form in HTML: 说我的HTML形式如下:



How can I write the equivalent using an XMLHttpRequest in Javascript? 如何在Javascript中使用XMLHttpRequest编写等效项?




#1楼

参考:https://stackoom.com/question/ekoE/使用XMLHttpRequest发送POST数据




#2楼

var xhr = new XMLHttpRequest();
xhr.open('POST', 'somewhere', true);
xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
xhr.onload = function () {// do something to responseconsole.log(this.responseText);
};
xhr.send('user=person&pwd=password&organization=place&requiredkey=key');

Or if you can count on browser support you could use FormData : 或者,如果您可以依靠浏览器支持,则可以使用FormData :

var data = new FormData();
data.append('user', 'person');
data.append('pwd', 'password');
data.append('organization', 'place');
data.append('requiredkey', 'key');var xhr = new XMLHttpRequest();
xhr.open('POST', 'somewhere', true);
xhr.onload = function () {// do something to responseconsole.log(this.responseText);
};
xhr.send(data);



#3楼


Minimal use of FormData to submit an AJAX request 最少使用FormData提交AJAX请求












Remarks 备注


  1. This does not fully answer the OP question because it requires the user to click in order to submit the request. 这不能完全回答OP问题,因为它要求用户单击才能提交​​请求。 But this may be useful to people searching for this kind of simple solution. 但这对于寻找这种简单解决方案的人们可能有用。

  2. This example is very simple and does not support the GET method. 此示例非常简单,不支持GET方法。 If you are interesting by more sophisticated examples, please have a look at the excellent MDN documentation . 如果您对更复杂的示例感兴趣,请查看出色的MDN文档 。 See also similar answer about XMLHttpRequest to Post HTML Form . 另请参见有关XMLHttpRequest到HTML表单的类似答案 。

  3. Limitation of this solution: As pointed out by Justin Blank and Thomas Munk (see their comments), FormData is not supported by IE9 and lower, and default browser on Android 2.3. 此解决方案的局限性:正如Justin Blank和Thomas Munk (请参阅他们的评论)所指出的那样,IE9及更低版本以及Android 2.3上的默认浏览器均不支持FormData




#4楼

var util = {getAttribute: function (dom, attr) {if (dom.getAttribute !== undefined) {return dom.getAttribute(attr);} else if (dom[attr] !== undefined) {return dom[attr];} else {return null;}},addEvent: function (obj, evtName, func) {//Primero revisar attributos si existe o no.if (obj.addEventListener) {obj.addEventListener(evtName, func, false);} else if (obj.attachEvent) {obj.attachEvent(evtName, func);} else {if (this.getAttribute("on" + evtName) !== undefined) {obj["on" + evtName] = func;} else {obj[evtName] = func;}}},removeEvent: function (obj, evtName, func) {if (obj.removeEventListener) {obj.removeEventListener(evtName, func, false);} else if (obj.detachEvent) {obj.detachEvent(evtName, func);} else {if (this.getAttribute("on" + evtName) !== undefined) {obj["on" + evtName] = null;} else {obj[evtName] = null;}}},getAjaxObject: function () {var xhttp = null;//XDomainRequestif ("XMLHttpRequest" in window) {xhttp = new XMLHttpRequest();} else {// code for IE6, IE5xhttp = new ActiveXObject("Microsoft.XMLHTTP");}return xhttp;}};//START CODE HERE.var xhr = util.getAjaxObject();var isUpload = (xhr && ('upload' in xhr) && ('onprogress' in xhr.upload));if (isUpload) {util.addEvent(xhr, "progress", xhrEvt.onProgress());util.addEvent(xhr, "loadstart", xhrEvt.onLoadStart);util.addEvent(xhr, "abort", xhrEvt.onAbort);
}util.addEvent(xhr, "readystatechange", xhrEvt.ajaxOnReadyState);var xhrEvt = {onProgress: function (e) {if (e.lengthComputable) {//Loaded bytes.var cLoaded = e.loaded;}},onLoadStart: function () {},onAbort: function () {},onReadyState: function () {var state = xhr.readyState;var httpStatus = xhr.status;if (state === 4 && httpStatus === 200) {//Completed success.var data = xhr.responseText;}}
};
//CONTINUE YOUR CODE HERE.
xhr.open('POST', 'mypage.php', true);
xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');if ('FormData' in window) {var formData = new FormData();formData.append("user", "aaaaa");formData.append("pass", "bbbbb");xhr.send(formData);} else {xhr.send("?user=aaaaa&pass=bbbbb");
}



#5楼


NO PLUGINS NEEDED! 无需插件!

Select the below code and drag that into in BOOKMARK BAR ( if you don't see it, enable from Browser Settings ), then EDIT that link : 选择以下代码并将其拖到“ 书签栏”中 ( 如果看不到,请从“浏览器设置”中启用 ),然后编辑该链接:

在此处输入图片说明

Javascript:var my_params = prompt("Enter your parameters", "var1=aaaa&var2=bbbbb"); var Target_LINK = prompt("Enter destination", location.href); function post(path, params) { var xForm = document.createElement("form"); xForm.setAttribute("method", "post"); xForm.setAttribute("action", path); for (var key in params) { if (params.hasOwnProperty(key)) { var hiddenField = document.createElement("input"); hiddenField.setAttribute("name", key); hiddenField.setAttribute("value", params[key]); xForm.appendChild(hiddenField); } } var xhr = new XMLHttpRequest(); xhr.onload = function () { alert(xhr.responseText); }; xhr.open(xForm.method, xForm.action, true); xhr.send(new FormData(xForm)); return false; } parsed_params = {}; my_params.split("&").forEach(function (item) { var s = item.split("="), k = s[0], v = s[1]; parsed_params[k] = v; }); post(Target_LINK, parsed_params); void(0);

That's all! 就这样! Now you can visit any website, and click that button in BOOKMARK BAR ! 现在,您可以访问任何网站,然后在BOOKMARK BAR中单击该按钮!




NOTE: 注意:

The above method sends data using XMLHttpRequest method, so, you have to be on the same domain while triggering the script. 上面的方法使用XMLHttpRequest方法发送数据,因此,在触发脚本时,您必须位于同一域中。 That's why I prefer sending data with a simulated FORM SUBMITTING, which can send the code to any domain - here is code for that: 这就是为什么我更喜欢使用模拟的FORM SUBMITTING发送数据,该表单可以将代码发送到任何域-这是该代码:

Javascript:var my_params=prompt("Enter your parameters","var1=aaaa&var2=bbbbb"); var Target_LINK=prompt("Enter destination", location.href); function post(path, params) { var xForm= document.createElement("form"); xForm.setAttribute("method", "post"); xForm.setAttribute("action", path); xForm.setAttribute("target", "_blank"); for(var key in params) { if(params.hasOwnProperty(key)) { var hiddenField = document.createElement("input"); hiddenField.setAttribute("name", key); hiddenField.setAttribute("value", params[key]); xForm.appendChild(hiddenField); } } document.body.appendChild(xForm); xForm.submit(); } parsed_params={}; my_params.split("&").forEach(function(item) {var s = item.split("="), k=s[0], v=s[1]; parsed_params[k] = v;}); post(Target_LINK, parsed_params); void(0);



#6楼

I have faced similar problem, using the same post and and this link I have resolved my issue. 我使用相同的帖子也遇到了类似的问题,并且此链接已经解决了我的问题。

var http = new XMLHttpRequest();var url = "MY_URL.Com/login.aspx";var params = 'eid=' +userEmailId+'&pwd='+userPwdhttp.open("POST", url, true);// Send the proper header information along with the request//http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");//http.setRequestHeader("Content-Length", params.length);// all browser wont support Refused to set unsafe header "Content-Length"//http.setRequestHeader("Connection", "close");//Refused to set unsafe header "Connection"// Call a function when the state http.onreadystatechange = function() {if(http.readyState == 4 && http.status == 200) {alert(http.responseText);}}http.send(params);

This link has completed information. 该链接具有完整的信息。


推荐阅读
  • 本文讨论了如何在codeigniter中识别来自angularjs的请求,并提供了两种方法的代码示例。作者尝试了$this->input->is_ajax_request()和自定义函数is_ajax(),但都没有成功。最后,作者展示了一个ajax请求的示例代码。 ... [详细]
  • 在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板
    本文介绍了在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板的方法和步骤,包括将ResourceDictionary添加到页面中以及在ResourceDictionary中实现模板的构建。通过本文的阅读,读者可以了解到在Xamarin XAML语言中构建控件模板的具体操作步骤和语法形式。 ... [详细]
  • 本文介绍了一种在PHP中对二维数组根据某个字段进行排序的方法,以年龄字段为例,按照倒序的方式进行排序,并给出了具体的代码实现。 ... [详细]
  • 本文介绍了Java后台Jsonp处理方法及其应用场景。首先解释了Jsonp是一个非官方的协议,它允许在服务器端通过Script tags返回至客户端,并通过javascript callback的形式实现跨域访问。然后介绍了JSON系统开发方法,它是一种面向数据结构的分析和设计方法,以活动为中心,将一连串的活动顺序组合成一个完整的工作进程。接着给出了一个客户端示例代码,使用了jQuery的ajax方法请求一个Jsonp数据。 ... [详细]
  • 本文介绍了使用FormData对象上传文件同时附带其他参数的方法。通过创建一个表单,将文件和参数添加到FormData对象中,然后使用ajax发送POST请求进行文件上传。在发送请求时,需要设置processData为false,告诉jquery不要处理发送的数据;同时设置contentType为false,告诉jquery不要设置content-Type请求头。 ... [详细]
  • 工作经验谈之-让百度地图API调用数据库内容 及详解
    这段时间,所在项目中要用到的一个模块,就是让数据库中的内容在百度地图上展现出来,如经纬度。主要实现以下几点功能:1.读取数据库中的经纬度值在百度上标注出来。2.点击标注弹出对应信息。3 ... [详细]
  • vue使用
    关键词: ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 展开全部下面的代码是创建一个立方体Thisexamplescreatesanddisplaysasimplebox.#Thefirstlineloadstheinit_disp ... [详细]
  • 本文介绍了PE文件结构中的导出表的解析方法,包括获取区段头表、遍历查找所在的区段等步骤。通过该方法可以准确地解析PE文件中的导出表信息。 ... [详细]
  • Imtryingtofigureoutawaytogeneratetorrentfilesfromabucket,usingtheAWSSDKforGo.我正 ... [详细]
  • SpringMVC接收请求参数的方式总结
    本文总结了在SpringMVC开发中处理控制器参数的各种方式,包括处理使用@RequestParam注解的参数、MultipartFile类型参数和Simple类型参数的RequestParamMethodArgumentResolver,处理@RequestBody注解的参数的RequestResponseBodyMethodProcessor,以及PathVariableMapMethodArgumentResol等子类。 ... [详细]
  • python限制递归次数(python最大公约数递归)
    本文目录一览:1、python为什么要进行递归限制 ... [详细]
  • Servlet多用户登录时HttpSession会话信息覆盖问题的解决方案
    本文讨论了在Servlet多用户登录时可能出现的HttpSession会话信息覆盖问题,并提供了解决方案。通过分析JSESSIONID的作用机制和编码方式,我们可以得出每个HttpSession对象都是通过客户端发送的唯一JSESSIONID来识别的,因此无需担心会话信息被覆盖的问题。需要注意的是,本文讨论的是多个客户端级别上的多用户登录,而非同一个浏览器级别上的多用户登录。 ... [详细]
  • 微信官方授权及获取OpenId的方法,服务器通过SpringBoot实现
    主要步骤:前端获取到code(wx.login),传入服务器服务器通过参数AppID和AppSecret访问官方接口,获取到OpenId ... [详细]
author-avatar
Joanna阿咪个_995
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有