angularjs $http实现form表单提交示例


Posted in Javascript onJune 09, 2017

需求:请求第三方后台接口返回一段html字符串如下,由前端去实现form表单的POST提交,

说明:form表单submit()实现自动提交input标签hidden,注意script代码中的document.redirect.submit();

<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
  <form name="redirect" action="http://form_process.php" method="POST">
    <input type="hidden" name="aaa" value="aaa_value">
    <input type="hidden" name="bbb" value="bbb_value">
  </form>
  <script type="text/javascript">
    document.redirect.submit();
  </script>
</body>
</html>

为了执行上一段字符串html代码,用到了iframe标签HTML5 的新属性--srcdoc

HTML <iframe> 标签的 srcdoc 属性

<iframe srcdoc="HTML_code">

example:

<iframe srcdoc="<p>Hello world!</p><script>alert(123);</script>" src="demo_iframe_srcdoc.htm"></iframe>

问题来了

form表单submit()提交后,不能知道表单提交完成的状态,因为从流程上考虑,需要判断表单提交成功、失败、网络无连接等状态,用submit()提交,获取不了这些状态。

解决步骤如下:

1、通过正则表达式提取表单中的method、action、和input表单的name、value的值,得到

var formData = {
 method: 'POST',
 url: 'http://form_process.php',
 data: {aaa:'aaa_value',bbb:'bbb_value'}
}

2、发送ajax请求

$http({
 method : formData.method,
 url :formData.url,
 data : $httpParamSerializerJQLike(formData.data), // pass in data as strings
 headers : { 'Content-Type': 'application/x-www-form-urlencoded' } // set the headers so angular passing info as form data (not request payload)
 })
 .success(function(data) {
  console.log(data);//返回html字符串
})
.error(function(error) {
  console.log(error);
});

有两个比较关键的地方:

1、$http参数data的值需要用$httpParamSerializerJQLike处理

2、加上headers : { 'Content-Type': 'application/x-www-form-urlencoded' }

如果不做上面两个处理,请求也能成功(状态返回:200),只是不能在成功回调中拿到想要的response结果。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jquery maxlength使用说明
Sep 09 Javascript
iframe调用父页面函数示例详解
Jul 17 Javascript
JavaScript原生xmlHttp与jquery的ajax方法json数据格式实例
Dec 04 Javascript
基于javascript实现图片预加载
Jan 05 Javascript
js数组的五种迭代方法及两种归并方法(推荐)
Jun 14 Javascript
Vue项目webpack打包部署到Tomcat刷新报404错误问题的解决方案
May 15 Javascript
为什么使用koa2搭建微信第三方公众平台的原因
May 16 Javascript
详解webpack打包时排除其中一个css、js文件或单独打包一个css、js文件(两种方法)
Oct 26 Javascript
vue如何限制只能输入正负数及小数
Jul 04 Javascript
超轻量级的js时间库miment使用解析
Aug 02 Javascript
layui文件上传控件带更改后数据传值的方法
Sep 23 Javascript
JavaScript中clientWidth,offsetWidth,scrollWidth的区别
Jan 25 Javascript
JavaScript设计模式之单例模式详解
Jun 09 #Javascript
Bootstrap Table使用整理(四)之工具栏
Jun 09 #Javascript
JavaScript设计模式之策略模式详解
Jun 09 #Javascript
Bootstrap Table使用整理(三)
Jun 09 #Javascript
Bootstrap Table使用整理(二)
Jun 09 #Javascript
Bootstrap Table使用整理(一)
Jun 09 #Javascript
Bootstrap Table使用整理(五)之分页组合查询
Jun 09 #Javascript
You might like
防止本地用户用fsockopen DDOS攻击对策
2011/11/02 PHP
PHP实现对站点内容外部链接的过滤方法
2014/09/10 PHP
php生成与读取excel文件
2016/10/14 PHP
php post换行的方法
2020/02/03 PHP
IE不出现Flash激活框的小发现的js实现方法
2007/09/07 Javascript
javascript显示隐藏层比较不错的方法分析
2008/09/30 Javascript
Prototype使用指南之selector.js说明
2008/10/26 Javascript
javascript实现的网页局布刷新效果
2008/12/01 Javascript
JAVASCRIPT keycode总结
2009/02/04 Javascript
jquery 动态创建元素的方式介绍及应用
2013/04/21 Javascript
15条JavaScript最佳实践小结
2013/08/09 Javascript
JavaScript代码简单实现求杨辉三角给定行的最大值
2013/10/29 Javascript
javascript 数字格式化输出的实现代码
2013/12/10 Javascript
javascript从image转换为base64位编码的String
2014/07/29 Javascript
JavaScript判断变量是否为空的自定义函数分享
2015/01/31 Javascript
浅谈javascript中关于日期和时间的基础知识
2016/07/13 Javascript
Angular4 中内置指令的基本用法
2017/07/31 Javascript
Vue组件创建和传值的方法
2018/08/17 Javascript
实例讲解vue源码架构
2019/01/24 Javascript
Layui数据表格 前后端json数据接收的方法
2019/09/19 Javascript
解决vue加scoped后就无法修改vant的UI组件的样式问题
2020/09/07 Javascript
Python linecache.getline()读取文件中特定一行的脚本
2008/09/06 Python
Linux 下 Python 实现按任意键退出的实现方法
2016/09/25 Python
Python实现对文件进行单词划分并去重排序操作示例
2018/07/10 Python
纯CSS3实现表单验证效果(非常不错)
2017/01/18 HTML / CSS
纯CSS3单页切换导航菜单界面设计的简单实现
2016/08/16 HTML / CSS
Melijoe时尚童装德国官网:Melijoe德国
2016/09/03 全球购物
改作风抓落实促发展心得体会
2014/09/10 职场文书
2015年乡镇卫生院工作总结
2015/04/22 职场文书
拾金不昧表扬信怎么写
2015/05/04 职场文书
毕业设计论文致谢词
2015/05/14 职场文书
2015年市场营销工作总结
2015/07/23 职场文书
调研报告的主要写法
2019/04/18 职场文书
SpringBoot+VUE实现数据表格的实战
2021/08/02 Java/Android
Java8 CompletableFuture 异步回调
2022/04/28 Java/Android
Python简易开发之制作计算器
2022/04/28 Python