2016-01-26 2 views
1

У меня есть этот небольшой блок кода для отправки электронной почты из профиля пользователя, то есть для отображения сообщения об ошибке или успешного сообщения.Ajax-вызов не отображает сообщение о статусе в div

// 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

Нужна html, где находится div, пожалуйста. –

+0

@RichardTheobald Не нужно. Он решен. –

+0

'this' не будет формой; вам нужно будет записать форму в функцию 'submit' для использования в обратном вызове. –

ответ

3

this внутри функции обратного вызова, больше не referrs в #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(); 
      } 
+0

Вот и все. Я помню, что нужно это делать. – mfgabriel92

+0

@GabrielMFernandes Вот что я и сделал, и ответил первым. Так или иначе. –

+0

@ GabrielMFernandes, вы должны принять ответ Габриэля М.Фернандеса, он был, по сути, первым. –

5

В функции successthis относится к объекту 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(); 
     } 
    } 
    }); 
});