ajax form提交的问题

连续两晚时间,一直在查找一个问题,同一样的数据,同一样的方法(前后台均一样),只是浏览器不一样,一个是IE6,一个是FF及chrome,但问题偏偏就是在IE6下,ajax提交后,参得到正常的返回值及数据。另两个就老是返回一个错误。还有就是在IE下能将新增或修改后的内容能正常的全部提交了,在FF,chrome下反而就变成了有些通提交成功,有些提交不成功,并返回错误的提示呢?

请看代码:


<form>
<div id="tree" style="width:280px; float:left; height:528px; background-color:#f5f5f5;border :1px solid Silver; overflow:auto;"></div>
<input type="hidden" value="" id="id" name="id"/>
<input type="hidden" name="pid" id="pid" value="0" />
<input type="hidden" value="{$tablename}" name="tablename" id="tablename">
<dl class="lineD">
<dt>名称:</dt>
<dd><input type="text" id="names" name="names" value="" /></dd>
<p>显示在前台的栏目名称,如首页,新闻等...</p>
</dl>
....
<div class="page_btm">
<button class="btn_b" style="margin-left:200px; *margin-left:60px;" onclick="submits()" >提交</button>
</div>
</form>



var param = [
{ name : 'names', value : $("#names").val() },
{ name : 'id', value : id },
{ name : 'pid', value : pid },
{ name : 'code', value : $("#code").val() },
];
$.ajax({
type: "POST",
timeout: 2000,
dataType: "json",
url: "{:U('Global/doAjaxSave')}",
data: param,
error: function(text){
alert("error: "+text.info);
window.location.reload();
},
success: function(text){
alert(text.info);
window.location.reload();
}
});


后台那边就是一个保存操作,方法是共用的。这个后台的方法在别的模块下是能正常运行的,也就是说后台部分问题,问题就在前台了。将HTML里的代码一行一行的删除测试,也是一样的错误提示,后来在IE下反复点了几次提交,突然发现窗口刷新了两次。有一次是reload()是刷新是正常的。但还有一次呢?

js代码删行的试,试过了,那就只有HTML了,刷了两次,那是不是就意味着提交了两次呢?查看了一下HTML,觉得没什么问题呀,只有两行<form>...</form>,为什么有这两行的呢?删了,再试。至此,问题元凶找出来了。


想了一下,可能是ajax用的是post提交方式,而页面又有一个from表单,故此,可能是在提交的时候从页触发了两次提交。所以就一直都出现这种奇奇怪怪的问题了。不过更令人想不通的是,当初为什么在加多一个<form>的标签上去呢?.....杯具,郁闷.......
### 处理通过AjaxForm提交的表单 为了处理通过 `AjaxForm` 提交的数据,在服务器端需要设置相应的逻辑来接收并解析这些数据。通常情况下,这涉及到读取POST参数中的键值对,并根据业务需求进行相应操作。 #### 接收和验证数据 假设前端使用jQuery发起了一个带有特定命名约定(如PID和nonce)的AJAX请求[^1]: ```php <?php // 假设这是PHP后端代码片段用于处理来自AjaxForm的数据 $pid = isset($_POST['pid']) ? intval($_POST['pid']) : null; $nonce = isset($_POST['_wpnonce']) && wp_verify_nonce($_POST['_wpnonce'], 'ajax-form-action') ? true : false; if ($pid === null || !$nonce) { http_response_code(400); // 返回错误状态码给客户端表示请求失败 echo json_encode(['error' => 'Invalid request']); exit(); } ?> ``` 这段代码展示了如何安全地获取并初步校验传入的POST变量。特别是对于敏感操作,应该始终检查必要的字段是否存在以及它们的内容是否合法。 #### 解析表单内容 如果选择了`form`选项,则可以从HTML `<form>`元素自动填充content属性;此时需要注意的是,默认行为是从表单的动作URL发送请求除非另外指定了目标地址[^2]: ```php <?php // 继续上面的例子... $data = $_POST; // 或者更具体地$_FILES 如果有上传文件的话 // 这里可以进一步处理接收到的数据,比如保存到数据库等 try { // 执行具体的业务逻辑,例如更新记录、创建新条目等等 } catch (\Exception $e) { http_response_code(500); echo json_encode(['error' => 'Server error occurred while processing your request.']); exit(); } echo json_encode(['success' => 'Data processed successfully!']); // 成功反馈给前端 ?> ``` 上述示例说明了基本流程——捕获输入、执行任务并将结果返回给调用方。值得注意的是,一旦PHP完成了响应输出之后就不会再继续运行其他指令直至下一个HTTP请求到来[^3]。 #### 客户端交互 最后,考虑到用户体验方面,点击“提交”按钮可能会隐藏当前显示的新医生添加表格,并刷新列表视图以反映最新更改[^4]。 ```javascript $.ajax({ type: "POST", url: "/path/to/your/php/script.php", // 后端API路径 data: $(this).serialize(), // 序列化表单数据作为payload success: function(response){ $('#AddNewPhysician').hide(); // 隐藏表单 updateTableWithNewEntry(data); // 更新页面上的表格展示 }, error: function(xhr,status,errorThrown){ alert('An error occurred during submission.'); } }); ``` 以上就是关于如何在服务端处理由AjaxForm提交过来的信息的一个概述性描述。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值