我有一小段代码用于从用户的个人资料中发送电子邮件,假设显示错误或成功消息。
// Mensagem para o dono do anúncio
$('#formulario_anunciante').on('submit', function (e) {
e.preventDefault();
$.ajax({
type: 'POST',
url: '/auto/usuario/send_contact_email',
dataType: 'json',
cache: false,
data: $(this).serialize(),
success: function (data) {
// It reaches here
console.log(data);
//
if (data.type === 'success') {
$(this).find('div.msg').removeClass().addClass('msg alerta_sucesso').html(data.msg).fadeIn().delay(5000).fadeOut();
} else {
$(this).find('div.msg').removeClass().addClass('msg alerta_erro').html(data.msg).fadeIn().delay(5000).fadeOut();
}
}
});
});
代码到达console.log
,在控制台中显示返回的消息,但不对表单中的div.msg
标记执行任何操作。它肯定在#formulario_anunciante
内。另外,出于测试目的,我尝试删除了类msg
,但标签似乎无法访问。
我已尝试添加JSON.parse(data)
并删除dataType: 'json'
,但无效。
答案 0 :(得分:4)
在success
函数内,this
引用了AJAX对象。因此,请尝试将原始变量的副本复制到$this
并使用它:
$('#formulario_anunciante').on('submit', function (e) {
e.preventDefault();
$this = $(this);
$.ajax({
type: 'POST',
url: '/auto/usuario/send_contact_email',
dataType: 'json',
cache: false,
data: $(this).serialize(),
success: function (data) {
// It reaches here
console.log(data);
//
if (data.type === 'success') {
$this.find('div.msg').removeClass().addClass('msg alerta_sucesso').html(data.msg).fadeIn().delay(5000).fadeOut();
} else {
$this.find('div.msg').removeClass().addClass('msg alerta_erro').html(data.msg).fadeIn().delay(5000).fadeOut();
}
}
});
});
答案 1 :(得分:3)
this
不再引用#formulario_anunciante
,因为它超出了范围。您需要更改选择器:
var $this = $('#formulario_anunciante')
if (data.type === 'success') {
$this.find('div.msg').removeClass().addClass('msg alerta_sucesso').html(data.msg).fadeIn().delay(5000).fadeOut();
} else {
$this.find('div.msg').removeClass().addClass('msg alerta_erro').html(data.msg).fadeIn().delay(5000).fadeOut();
}