简介:这是ajax form提交的问题的详细页面,介绍了和php,有关的知识、技巧、经验,和一些php源码等。
class='pingjiaF' frameborder='0' src='http://biancheng.dnbcw.info/pingjia.php?id=332634' scrolling='no'> 连续两晚时间,一直在查找一个问题,同一样的数据,同一样的方法(前后台均一样),只是浏览器不一样,一个是IE6,一个是FF及chrome,但问题偏偏就是在IE6下,ajax提交后,参得到正常的返回值及数据。另两个就老是返回一个错误。还有就是在IE下能将新增或修改后的内容能正常的全部提交了,在FF,chrome下反而就变成了有些通提交成功,有些提交不成功,并返回错误的提示呢?请看代码:
<form> <div id="tree" style="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>的标签上去呢?.....杯具,郁闷.......