我需要在yii2应用中从html表单发送数据。我需要使用ajax从这个表单发送数据并从服务器获取响应以输出它。在yii 1.0中我使用了非常有用的帮助器ajaxSubmitButton,我找不到如何在yii2中使用ajax从表单发送数据。你能告诉我怎么做吗?有没有关于它的文章?
谢谢。
答案 0 :(得分:11)
Yii ActiveForm在其生命周期的许多阶段都支持JavaScript事件。您可以使用beforeSubmit
事件来实现您的目标。在JavaScript中:
$(document).ready(
$('#myform').on('beforeSubmit', function(event, jqXHR, settings) {
var form = $(this);
if(form.find('.has-error').length) {
return false;
}
$.ajax({
url: form.attr('action'),
type: 'post',
data: form.serialize(),
success: function(data) {
// do something ...
}
});
return false;
}),
);
请注意,您可以通过从事件回调中返回false
来停止正常提交表单。
答案 1 :(得分:0)
在服务器验证规则的提交失败时重新加载表单
$form.on('beforeSubmit', function (event, jqXHR, settings) {
if ($form.find('.has-error').length) {
return false;
}
$.ajax({
url: $form.attr('action'),
type: 'post',
data: $form.serialize(),
success: function (datos, status, xhr) {
var ct = xhr.getResponseHeader("content-type") || "";
//fail server validation
if (ct.indexOf('html') > -1) {
if ($(datos).find(".has-error").length)
{
modal.modal('show');
modal.find(".modal-body").html(datos);
}
}
//real success
if (ct === "" || ct.indexOf('json') > -1) {
modal.modal('hide');
}
},
error: function (datos) {
alert(datos.responseText);
},
complete: function (datos) {
console.log(datos);
}
});
return false;
})