这里介绍的是通过js进行异步form提交,而不是表单Form Submit提交。

提交方式主要有以下两种:

  1. 参数为字符串方式的提交,如:a=b&c=d
  2. formData方式提交, 如:new FormData()

(可选)简单的php测试代码:

<?php
header('Access-Control-Allow-Origin:*');
var_dump($_REQUEST);

微坑爹:请不要试图将下文的request.open("POST") 换为 request.open("GET")。由于 request.Send( ... ) 只能发送POST参数,GET请求直接在URL后拼接参数即可。

但不管你是GET请求还是POST请求,Send()还是得调用的,不然怎么发送请求呢……

一、参数为字符串,如:a=b&c=d 方式的提交。

需要注意必须指定请求头为 application/x-www-form-urlencoded;charset=utf-8 

// 源生xhr方式
var request = new XMLHttpRequest();
request.open("POST", "http://fuckyou.com/test.php", true);
request.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
request.send('a=b&c=d'); // jQuery 方式
$(function(){
$.ajax({
url: "http://fuckyou.com/test.php",
type: "post",
data: 'a=b&c=d',
contentType: 'application/x-www-form-urlencoded;charset=utf-8',
success: function (data) {
console.log(data);
}
})
})

如果你的参数是json对象,也可以通过简单 obj2formdata 函数的拼接转成&相连的字符串。

var obj2formdata = (body) => {
let formparams = '';
Object.keys(body).forEach(key => {
if (formparams.length > 0) {
formparams += '&';
}
formparams = formparams + key + '=' + body[key];
});
return formparams
} var request = new XMLHttpRequest();
request.open("POST", "http://fuckyou.com/test.php", true);
request.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
request.send(obj2formdata({a: 'b', c: 'd'}));

后端打印出来的数据如图所示:

二、formData方式提交,不需要指定头为/form类型,不然后端会出现奇怪的数据格式,原因不详。

// 源生xhr方式
var formData = new FormData();
formData.append("username", "Groucho");
formData.append("accountnum", 123456);
var request = new XMLHttpRequest();
request.open("POST", "http://fuckyou.com/test.php", true);
// request.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
request.send(formData); // jQuery 方式
$(function(){
var formData = new FormData();
formData.append("username", "Groucho");
formData.append("accountnum", 123456); $.ajax({
url: "http://fuckyou.com/test.php",
type: "post",
data: formData,
processData:false,
contentType:false,
success: function (data) {
console.log(data);
}
})
})

后端打印出来的数据如图所示:

如果你设置头,会发现后端打印出来的数据是这样的:

温故而知新: 关于 js Form 方式提交的一些新认知的更多相关文章

  1. 导出excel时,以form方式提交json数据

    今天在写项目时写到一个excel的导出,开始想用ajax请求后台后导出,但发现ajax会有返回值,而且ajax无法直接输出文件,而后台的excel导出方法已经封装好,不方便修改. 就改用了提交的方式f ...

  2. python_way day21 Django文件上传Form方式提交,原生Ajax提交字符处啊,Django文件上传之原生Ajax方式、jQuery Ajax方式、iframe方式,Django验证码,抽屉示例,

    python_way day21 1.Django文件上传至Form方式 2.原生Ajax文件上传提交表单 使用原生Ajax好处:不依赖jquery,在发送一个很小的文件或者字符串的时候就可以用原生A ...

  3. easyui form 方式提交数据

    http://ldzyz007.iteye.com/blog/2067540 <form id="ff" method="post">      . ...

  4. Node.js——post方式提交的图片如何保存

    https://www.cnblogs.com/bruce-gou/p/6399766.html 没有使用express框架,主要是对于 request 的监听,data的时候对数据进行保存,end的 ...

  5. Node.js——body方式提交数据

    引入核心模块 http,利用其 api(http.createServer) 返回一个 http.server 实例,这个实例是继承于net.Server,net.Server 也是通过net.cre ...

  6. jquery.form.js实现将form提交转为ajax方式提交的使用方法

    本文实例讲述了jquery.form.js实现将form提交转为ajax方式提交的方法.分享给大家供大家参考.具体分析如下: 这个框架集合form提交.验证.上传的功能. 这个框架必须和jquery完 ...

  7. jquery.form.js实现将form提交转为ajax方式提交的方法

    本文实例讲述了jquery.form.js实现将form提交转为ajax方式提交的方法.分享给大家供大家参考.具体分析如下: 这个框架集合form提交.验证.上传的功能. 这个框架必须和jquery完 ...

  8. node.js 下依赖Express 实现post 4种方式提交参数

    上面这个图好有意思啊,哈哈, v8威武啊.... 在2014年的最后一天和大家分享关于node.js 如何提交4种格式的post数据. 上上一篇说到了关于http协议里定义的4种常见数据的post方法 ...

  9. js replace 全局替换 以表单的方式提交参数 判断是否为ie浏览器 将jquery.qqFace.js表情转换成微信的字符码 手机端省市区联动 新字体引用本地运行可以获得,放到服务器上报404 C#提取html中的汉字 MVC几种找不到资源的解决方式 使用Windows服务定时去执行一个方法的三种方式

    js replace 全局替换   js 的replace 默认替换只替换第一个匹配的字符,如果字符串有超过两个以上的对应字符就无法进行替换,这时候就要进行一点操作,进行全部替换. <scrip ...

随机推荐

  1. Android -- 在ScrollView中嵌套ListView

    在做一个工程,这个工程的布局可以相当的复杂,最外面是ScrollView,在ScrollView里面有两个Listview,这下好了,布局出来了,放在机子上跑,卡得想死有木有,信息乱跑乱出现,表示非常 ...

  2. Linux服务器权限管理之sudo高级应用

    Sudo是允许系统管理员让普通用户执行一些或者全部的root命令的一个工具,减少了root用户的登陆和管理时间,提高了安全性,Sudo不是对shell的一个代替,它是面向每个命令的. Linux系统的 ...

  3. PHP 解决版本问题:"Assigning the return value of new by reference is deprecated"

    问题描述:     在最近使用ECSHOP v273帮客户建立了一个商城系统,商城搭建一切ok但在使用中后台发现了一个500错误     在服务器上访问该地址发现了错误信息:"Assigni ...

  4. 字符串HASH 学习总结 &amp;&amp; 模板

    一.字符串HASH模板  取自挑战程序设计竞赛(第2版) </pre><pre code_snippet_id="446698" snippet_file_nam ...

  5. 一个简单RPC框架是怎样炼成的(IV)——实现RPC消息的编解码

    之前我们制定了一个非常easy的RPC消息 的格式,可是还遗留了两个问题,上一篇解决掉了一个.还留下一个 我们并没有实现对应的encode和decode方法,没有基于能够跨设备的字符串传输,而是直接的 ...

  6. 嵌入式web服务器-thttpd

    交叉编译thttpd http://lakie.blog.163.com/blog/static/45185220201162910432330/ thttpd安装与调试 http://blog.cs ...

  7. mac 连接windows 共享内容

    mac 连接windows 共享内容 一:场景 在win7上下载了一个5G左右的系统文件,想弄到mac上,本打算用使用U盘,把文件从win7copy到mac电脑上: 可是U盘的分区是fat的,大于4G ...

  8. Java从零开始学二十一(集合List接口)

    一.List接口 List是Collection的子接口,里面可以保存各个重复的内容,此接口的定义如下: public interface List<E> extends Collecti ...

  9. 算法笔记_177:历届试题 城市建设(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 问题描述 栋栋居住在一个繁华的C市中,然而,这个城市的道路大都年久失修.市长准备重新修一些路以方便市民,于是找到了栋栋,希望栋栋能帮助他. C市中有 ...

  10. PHPWIND和DISCUZ什么区别?

    大家都知道,phpwind和discuz是两款用来做论坛的强大的php开源程序.客观的说,现在phpwind和discuz各有所长,要说他们哪个比较好,也是很难的事情,无忧主机小编在这里也不敢妄下结论 ...