使用 Yii 2 提交两次 Ajax 表单
Posted
技术标签:
【中文标题】使用 Yii 2 提交两次 Ajax 表单【英文标题】:Ajax form submitting twice with Yii 2 【发布时间】:2015-01-26 09:26:19 【问题描述】:我环顾四周,没有其他类似的帖子对我有帮助。我在Yii 2
和jQuery
中构建了一个基于AJAx
的表单,它似乎提交了两次表单。
我的表格:
$form = ActiveForm::begin([
'id' => 'company_form',
'ajaxDataType' => 'json',
'ajaxParam' => 'ajax',
'enableClientValidation' => false
]);
我的 JS 代码:
$(document).ready(function()
/* Processes the company signup request */
$('#company_form').submit(function()
signup('company');
return false;
);
)
function signup(type)
var url;
// Set file to get results from..
switch (type)
case 'company':
url = '/site/company-signup';
break;
case 'client':
url = '/site/client-signup';
break;
// Set parameters
var dataObject = $('#company_form').serialize();
// Run request
getAjaxData(url, dataObject, 'POST', 'json')
.done(function(response)
//.........
)
.fail(function()
//.....
);
// End
不应该通过我将return: false;
放入javascript 代码来停止标准提交吗?
为什么要提交两次?
更多信息: 然而奇怪的是,这似乎只是第一次发生;如果我再次点击提交,它只会提交一次;但如果我重新加载页面并点击提交,它会再次执行两次。
【问题讨论】:
在 firebug 中是否发送了两次 ajax 请求? @AliMasudianPour 是的,当我观看控制台时,请求被发送了两次。然而奇怪的是,这似乎只是第一次发生;如果我再次点击提交,它只会提交一次;但如果我重新加载页面并点击提交,它会再次执行两次。 【参考方案1】:您可能需要如下更改您的代码:
$('#company_form').submit(function(e)
e.preventDefault();
e.stopImmediatePropagation();
signup('company');
return false;
);
http://api.jquery.com/event.stoppropagation/
http://api.jquery.com/event.stopimmediatepropagation/
【讨论】:
做到了! :) 非常感谢! 我也有同样的问题。该表单具有'enableAjaxValidation' => true, 'validateOnSubmit' => true
,但即使使用您提供的代码,该表单仍会提交两次。只有在没有错误的情况下才提交两次。【参考方案2】:
解决方案常见
Next JS 将适用于'enableClientValidation'
的任何状态:
$('#company_form').on('beforeSubmit', function (e)
signup('company');
return false;
);
https://yii2-cookbook.readthedocs.io/forms-activeform-js/#using-events
【讨论】:
以上是关于使用 Yii 2 提交两次 Ajax 表单的主要内容,如果未能解决你的问题,请参考以下文章
解决YII提交POST表单出现400错误,以及ajax post请求时出现400问题
Yii框架用ajax提交表单时候报错Bad Request (#400): Unable to verify your data submission.