更新:如需要使用php进行服务器后端直接提交表单的,请移步:
最近项目中有用到登录第三方web平台集成,里面有个小需求是可以在内部服务器上直接post/get提交相关参数到第三方服务器进行web登录。故用php做了一个简单的表单生成函数,post及get提交使用常规html表单方式提交,提交后会跳转到目标url地址。但是提交contentType:’application/json’头数据只能使用ajax异步提交,且只能获取到返回值,不能提交后直接跳转到目标地址,这种提交方式一般前后端分离服务器用的比较多一点。
<?php$url='post.php';$parms=array("username"=>"admin","password"=>"123456");$model='post';$usejson =0;//为1时 只能调用ajax提交并获取返回值,为0时使用普通html表单提交createForm($url,$parms,$model,$usejson);function createForm($url,$parms,$model,$usejson=0){echo '<script src="http://libs.baidu.com/jquery/2.1.4/jquery.min.js"></script>';echo '<form action="'.$url.'" name="form1" id="form1" method="'.$model.'" >';foreach($parms as $key =>$value){echo '<br>'.$key.'<input type="text" name="'.$key.'" value="'.$value.'">';}echo '<br><input type="hidden" id="model" value="'.$usejson.'">';echo '<br><input type="button" onclick="sub();" value="登录系统">';echo '</form>';echo '<script>function sub(){var mo = document.getElementById(\'model\').value;if(mo != 1){document.form1.submit();}else{//读取表单数据并数组化---最终转换为json字符串var formArray = $("#form1").serializeArray();var dataArray = {};$.each(formArray,function(){if(dataArray[this.name]){if(!dataArray[this.name].push){dataArray[this.name] = [dataArray[this.name]];}dataArray[this.name].push(this.value || \'\');}else{dataArray[this.name] = this.value || \'\';}});var data = JSON.stringify(dataArray);//转换成string数据,以便后台接收////json字符串转换结束,用于下面ajax提交数据alert(data);$.ajax({type: \''.$model.'\',contentType:\'application/json\',url: \''.$url.'\',data: data,success: function(data) {alert(JSON.stringify(data));console.log(data);if(data.hasOwnProperty("url")){console.log(data["url"]);window.location.href= data["url"];//json中如有url键则跳转至该url}else{alert(\'返回数据无url地址\');}},error:function(){ alert(\'发生错误\');}});}}// sub();</script>';}?>
上述代码中有用到将form表单直接格式化为json数据的操作方法。代码提取后可封装为js函数,此处仅单独截取实现代码。
//读取表单数据并数组化---最终转换为json字符串var formArray = $("#form1").serializeArray();var dataArray = {};$.each(formArray,function(){if(dataArray[this.name]){if(!dataArray[this.name].push){dataArray[this.name] = [dataArray[this.name]];}dataArray[this.name].push(this.value || \'\');}else{dataArray[this.name] = this.value || \'\';}});var data = JSON.stringify(dataArray);//转换成string数据,以便后台接收//json字符串转换结束,用于下面ajax提交
发表评论