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 相关文章推荐
javascript各种复制代码收集
Sep 20 Javascript
table对象中的insertRow与deleteRow使用示例
Jan 26 Javascript
js实现的彩色方块飞舞奇幻效果
Jan 27 Javascript
JavaScript 浏览器兼容性总结及常用浏览器兼容性分析
Mar 30 Javascript
总结JavaScript三种数据存储方式之间的区别
May 03 Javascript
jQuery progressbar通过Ajax请求实现后台进度实时功能
Oct 11 Javascript
浅谈js中几种实用的跨域方法原理详解
Dec 02 Javascript
利用jQuery实现简单的拖曳效果实例代码
Oct 20 jQuery
基于input动态模糊查询的实现方法
Dec 12 Javascript
vue中设置height:100%无效的问题及解决方法
Jul 27 Javascript
微信小程序结合Storage实现搜索历史效果
May 18 Javascript
vue3.0封装轮播图组件的步骤
Mar 04 Vue.js
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
PHP中在数据库中保存Checkbox数据(2)
2006/10/09 PHP
php截取字符串之截取utf8或gbk编码的中英文字符串示例
2014/03/12 PHP
PHP的password_hash()使用实例
2014/03/17 PHP
weiphp微信公众平台授权设置
2016/01/04 PHP
php获取手机端的号码以及ip地址实例代码
2018/09/12 PHP
Laravel5.5 手动分页和自定义分页样式的简单实现
2019/10/15 PHP
Javascript YUI 读码日记之 YAHOO.util.Dom - Part.2 0
2008/03/22 Javascript
替代window.event.srcElement效果的可兼容性的函数
2009/12/18 Javascript
jQuery之浮动窗口实现代码(两种方法)
2010/09/08 Javascript
Jquery 例外被抛出且未被接住原因介绍
2013/09/04 Javascript
JS获取时间的方法
2015/01/21 Javascript
使用requestAnimationFrame实现js动画性能好
2015/08/06 Javascript
使用NodeJs 开发微信公众号(三)微信事件交互实例
2016/03/02 NodeJs
BootStrap Validator 版本差异问题导致的submitHandler失效问题的解决方法
2016/12/01 Javascript
详解Node.js中exports和module.exports的区别
2017/04/19 Javascript
详解创建自定义的Angular Schematics
2018/06/06 Javascript
详解JS中统计函数执行次数与执行时间
2018/09/04 Javascript
解决vue-cli脚手架打包后vendor文件过大的问题
2018/09/27 Javascript
vue 项目 iOS WKWebView 加载
2019/04/17 Javascript
layui 实现table翻页滚动条位置保持不变的例子
2019/09/05 Javascript
vue-cli+webpack项目打包到服务器后,ttf字体找不到的解决操作
2020/08/28 Javascript
Vue + ts实现轮播插件的示例
2020/11/10 Javascript
Django框架登录加上验证码校验实现验证功能示例
2019/05/23 Python
Python 字符串类型列表转换成真正列表类型过程解析
2019/08/26 Python
在Python中使用turtle绘制多个同心圆示例
2019/11/23 Python
Python基础之字典常见操作经典实例详解
2020/02/26 Python
Python ADF 单位根检验 如何查看结果的实现
2020/06/03 Python
CSS+jQuery+PHP+MySQL实现的在线答题功能
2015/04/25 HTML / CSS
struct与class的区别
2014/02/03 面试题
ddl,dml和dcl的含义
2016/05/08 面试题
医学专业大学生求职的自我评价
2013/11/27 职场文书
旷课检讨书大全
2014/01/21 职场文书
旅游与环境专业求职信
2014/06/05 职场文书
2014小学数学教研组工作总结
2014/12/06 职场文书
小学信息技术教学反思
2016/02/16 职场文书
Python如何用re模块实现简易tokenizer
2022/05/02 Python