Mensagem rápida (AJAX) com bugs
2 participantes
Fórum dos Fóruns :: Ajuda e atendimento ao utilizador :: Questões sobre códigos :: Questões resolvidas sobre códigos Javascript e jQuery
Página 1 de 1
Mensagem rápida (AJAX) com bugs
Detalhes da questão
Endereço do fórum: brasilplayforever.com/forum
Versão do fórum: PhpBB3
Descrição
Olá meus amigos, estou muito grato de vocês estarem vendo esse meu post. O problema é o seguinte: usei o post rápido com AJAX no meu fórum, mas reparei que bugaram algumas mensagens. Comecei reparando quando há um espaço acima da caixa de mensagens de regras. Ao clicar em ENVIAR, aparecia o mesmo espaço de regras porém duplicado. Precisaria atualizar a página para que esta mensagem aparecesse.
Outro problema quanto a este código é que quando eu estou postando e alguém posta mais rápido que eu, a mensagem some. Exemplo: abri o tópico 12:00, fulano postou 12:01 e eu postei 12:02. A mensagem que eu pus não envia e não é salva em nenhum local, simplesmente some da interface apesar de aparecer que a mensagem foi enviada. Detalhe: ao invés de direcionar para a mensagem que eu deveria ter enviado, direciona ao mentor da nova mensagem (no caso, quem postou 12:01).
Ao clicar com o botão em "Enviar": https://i.imgur.com/2xqGkVK.png
Com a mensagem enviada (é preciso atualizar a página para que apareça): https://i.imgur.com/hu1CAxb.png
- Código:
/*
* Código: Postar mensagem sem refresh
* Versão: 1.0
* Autor: Daemon
* Data: 17/09/2016
*/
$(document).on("ready", function () {
$("body").append(
'<style>' +
'.alert-success, .alert-error {' +
' -moz-box-shadow: rgba(0,0,0,0.1) 0 1px 3px;' +
' -webkit-box-shadow: rgba(0,0,0,0.1) 0 1px 3px;' +
' background: url(http://imgur.com/J3aqwYE.png) repeat-x 0 0;' +
' box-shadow: rgba(0,0,0,0.1) 0 1px 3px;' +
' display: block;' +
' font-size: 12px;' +
' line-height: 1.6;' +
' padding: 10px;' +
' text-shadow: 0 1px 0 rgba(255,255,255,0.5);' +
'}' +
'.alert-success {' +
' background-color: #cde3a4;' +
' border: 1px solid #a8c471;' +
' color: #436500;' +
'}' +
'.alert-error {' +
' background-color: #ffbdbd;' +
' border: 1px solid #d8aba7;' +
' color: #92463f;' +
'}' +
'</style>'
);
var hrefResposta = $("a[href^='/post?t=']").attr("href");
var form = $("#quick_reply");
$("<div id='resultados_ajax'></div>").prependTo(form);
$('#quick_reply input[name="post"]').on('click', function (event) {
event.preventDefault();
var resAjax = $("#resultados_ajax"); // Elemento resultados_ajax
var textEditorVal = $("textarea").sceditor("instance").val(); // Valor do editor
var min = 10; // Mínimo de caracteres para o post
var max = 15000; // Máximo de caracteres para o post (Não ultrapasse o valor limite estipulado pela forumeiros)
if (textEditorVal.length < min) {
resAjax.html("Digite pelo menos " + min + " caracteres para enviar o post").attr("class", "alert-error");
return false;
}
if (textEditorVal.length > max) {
resAjax.html("Seu post ultrapassou o limite de " + max + " caracteres").attr("class", "alert-error");
return false;
}
$("input[type='submit']").attr("disabled", true);
var parametros = $("#quick_reply").serialize();
$.ajax({
type: "POST",
url: hrefResposta,
data: parametros + "&message=" + textEditorVal + "&post=1",
beforeSend: function (objeto) {
resAjax.html("Carregando...").attr("class", false);
},
success: function (dados) {
var href = $("a[href^='/viewtopic']", dados).attr("href");
$.get(href, function (e) {
$(".post:last", e).hide().insertAfter(".post:last").slideDown("fast", function () {
$("html, body").animate({
scrollTop: $(".post:last").offset().top
}, 500);
});
});
resAjax.html("Postado com sucesso!").attr("class", "alert-success");
$("input[type='submit']").attr("disabled", false);
$("textarea").sceditor("instance").val("");
}
});
return false;
});
});
Fonte do código: https://ajuda.forumeiros.com/t107420-tutorial-postar-em-ajax-com-avisos
Re: Mensagem rápida (AJAX) com bugs
Tente trocar por esse:
- Código:
/*
* Código: Postar mensagem sem refresh
* Versão: 1.0
* Autor: Daemon
* Data: 17/09/2016
*/
$(document).on("ready", function () {
$("body").append(
'<style>' +
'.alert-success, .alert-error {' +
' -moz-box-shadow: rgba(0,0,0,0.1) 0 1px 3px;' +
' -webkit-box-shadow: rgba(0,0,0,0.1) 0 1px 3px;' +
' background: url(http://imgur.com/J3aqwYE.png) repeat-x 0 0;' +
' box-shadow: rgba(0,0,0,0.1) 0 1px 3px;' +
' display: block;' +
' font-size: 12px;' +
' line-height: 1.6;' +
' padding: 10px;' +
' text-shadow: 0 1px 0 rgba(255,255,255,0.5);' +
'}' +
'.alert-success {' +
' background-color: #cde3a4;' +
' border: 1px solid #a8c471;' +
' color: #436500;' +
'}' +
'.alert-error {' +
' background-color: #ffbdbd;' +
' border: 1px solid #d8aba7;' +
' color: #92463f;' +
'}' +
'</style>'
);
var hrefResposta = $("a[href^='/post?t=']").attr("href");
var form = $("#quick_reply");
$("<div id='resultados_ajax'></div>").prependTo(form);
$('#quick_reply input[name="post"]').on('click', function (event) {
event.preventDefault();
var resAjax = $("#resultados_ajax"); // Elemento resultados_ajax
var textEditorVal = $("textarea").sceditor("instance").val(); // Valor do editor
var min = 10; // Mínimo de caracteres para o post
var max = 15000; // Máximo de caracteres para o post (Não ultrapasse o valor limite estipulado pela forumeiros)
if (textEditorVal.length < min) {
resAjax.html("Digite pelo menos " + min + " caracteres para enviar o post").attr("class", "alert-error");
return false;
}
if (textEditorVal.length > max) {
resAjax.html("Seu post ultrapassou o limite de " + max + " caracteres").attr("class", "alert-error");
return false;
}
$("input[type='submit']").attr("disabled", true);
var parametros = $("#quick_reply").serialize();
$.ajax({
type: "POST",
url: hrefResposta,
data: parametros + "&message=" + textEditorVal + "&post=1",
beforeSend: function (objeto) {
resAjax.html("Carregando...").attr("class", false);
},
success: function (dados) {
var href = $("a[href^='/viewtopic']", dados).attr("href");
$.get(href, function (e) {
$("input[type='submit']").attr("disabled", false);
if ($('div.h3:contains("Revisão do tópico")', e).length) {
resAjax.html("Uma nova mensagem foi adicionada no momento em que você escrevia a sua mensagem. Você pode consultar as últimas mensagens postadas abaixo e decidir por modificá-la ou salvá-la.").attr("class", "alert-error");
return;
}
$(".post[id^='p']:last", e).hide().insertAfter(".post[id^='p']:last").slideDown("fast", function () {
$("html, body").animate({
scrollTop: $(".post[id^='p']:last").offset().top
}, 500);
});
resAjax.html("Postado com sucesso!").attr("class", "alert-success");
$("textarea").sceditor("instance").val("");
});
}
});
return false;
});
});
Re: Mensagem rápida (AJAX) com bugs
Olá Kyo, obrigado por ter respondido.
Desbugou o problema em que não aparecia a mensagem e sim repetia as regras, porém o bug de alguém postar mais rápido continua.
Novamente, obrigado.
Desbugou o problema em que não aparecia a mensagem e sim repetia as regras, porém o bug de alguém postar mais rápido continua.
Novamente, obrigado.
Re: Mensagem rápida (AJAX) com bugs
Mais uma tentativa. Troque por esse:
- Código:
/*
* Código: Postar mensagem sem refresh
* Versão: 1.0
* Autor: Daemon
* Data: 17/09/2016
*/
$(document).on("ready", function () {
$("body").append(
'<style>' +
'.alert-success, .alert-error {' +
' -moz-box-shadow: rgba(0,0,0,0.1) 0 1px 3px;' +
' -webkit-box-shadow: rgba(0,0,0,0.1) 0 1px 3px;' +
' background: url(http://imgur.com/J3aqwYE.png) repeat-x 0 0;' +
' box-shadow: rgba(0,0,0,0.1) 0 1px 3px;' +
' display: block;' +
' font-size: 12px;' +
' line-height: 1.6;' +
' padding: 10px;' +
' text-shadow: 0 1px 0 rgba(255,255,255,0.5);' +
'}' +
'.alert-success {' +
' background-color: #cde3a4;' +
' border: 1px solid #a8c471;' +
' color: #436500;' +
'}' +
'.alert-error {' +
' background-color: #ffbdbd;' +
' border: 1px solid #d8aba7;' +
' color: #92463f;' +
'}' +
'</style>'
);
var hrefResposta = $("a[href^='/post?t=']").attr("href");
var form = $("#quick_reply");
$("<div id='resultados_ajax'></div>").prependTo(form);
$('#quick_reply input[name="post"]').on('click', function (event) {
event.preventDefault();
var resAjax = $("#resultados_ajax"); // Elemento resultados_ajax
var textEditorVal = $("textarea").sceditor("instance").val(); // Valor do editor
var min = 10; // Mínimo de caracteres para o post
var max = 15000; // Máximo de caracteres para o post (Não ultrapasse o valor limite estipulado pela forumeiros)
if (textEditorVal.length < min) {
resAjax.html("Digite pelo menos " + min + " caracteres para enviar o post").attr("class", "alert-error");
return false;
}
if (textEditorVal.length > max) {
resAjax.html("Seu post ultrapassou o limite de " + max + " caracteres").attr("class", "alert-error");
return false;
}
$("input[type='submit']").attr("disabled", true);
var parametros = $("#quick_reply").serialize();
$.ajax({
type: "POST",
url: hrefResposta,
data: parametros + "&message=" + textEditorVal + "&post=1",
beforeSend: function (objeto) {
resAjax.html("Carregando...").attr("class", false);
},
success: function (dados) {
$("input[type='submit']").attr("disabled", false);
if ($('div.h3:contains("Revisão do tópico")', dados).length) {
resAjax.html("Uma nova mensagem foi adicionada no momento em que você escrevia a sua mensagem. Você pode consultar as últimas mensagens postadas abaixo e decidir por modificá-la ou salvá-la.").attr("class", "alert-error");
return;
}
var href = $("a[href^='/viewtopic']", dados).attr("href");
$.get(href, function (e) {
$(".post[id^='p']:last", e).hide().insertAfter(".post[id^='p']:last").slideDown("fast", function () {
$("html, body").animate({
scrollTop: $(".post[id^='p']:last").offset().top
}, 500);
});
resAjax.html("Postado com sucesso!").attr("class", "alert-success");
$("textarea").sceditor("instance").val("");
});
}
});
return false;
});
});
Re: Mensagem rápida (AJAX) com bugs
Com este código, testei o postagem rápida de outra pessoa, não funcionou. Notei que o bug das regras duplicadas voltaram:
Re: Mensagem rápida (AJAX) com bugs
Eu acessei o seu fórum e não encontrei o script aplicado. Em adição, realizei testes com o script e pude confirmar que está funcional:
Preciso que o deixe aplicado e nos avise aqui para que possamos fazer os devidos testes.
o/
- Código:
/*
* Código: Postar mensagem sem refresh
* Versão: 1.0
* Autor: Daemon
* Data: 17/09/2016
*/
$(document).on("ready", function () {
$("body").append(
'<style>' +
'.alert-success, .alert-error {' +
' -moz-box-shadow: rgba(0,0,0,0.1) 0 1px 3px;' +
' -webkit-box-shadow: rgba(0,0,0,0.1) 0 1px 3px;' +
' background: url(http://imgur.com/J3aqwYE.png) repeat-x 0 0;' +
' box-shadow: rgba(0,0,0,0.1) 0 1px 3px;' +
' display: block;' +
' font-size: 12px;' +
' line-height: 1.6;' +
' padding: 10px;' +
' text-shadow: 0 1px 0 rgba(255,255,255,0.5);' +
'}' +
'.alert-success {' +
' background-color: #cde3a4;' +
' border: 1px solid #a8c471;' +
' color: #436500;' +
'}' +
'.alert-error {' +
' background-color: #ffbdbd;' +
' border: 1px solid #d8aba7;' +
' color: #92463f;' +
'}' +
'</style>'
);
var hrefResposta = $("a[href^='/post?t=']").attr("href");
var form = $("#quick_reply");
$("<div id='resultados_ajax'></div>").prependTo(form);
$('#quick_reply input[name="post"]').on('click', function (event) {
event.preventDefault();
var resAjax = $("#resultados_ajax"); // Elemento resultados_ajax
var textEditorVal = $("textarea").sceditor("instance").val(); // Valor do editor
var min = 10; // Mínimo de caracteres para o post
var max = 15000; // Máximo de caracteres para o post (Não ultrapasse o valor limite estipulado pela forumeiros)
if (textEditorVal.length < min) {
resAjax.html("Digite pelo menos " + min + " caracteres para enviar o post").attr("class", "alert-error");
return false;
}
if (textEditorVal.length > max) {
resAjax.html("Seu post ultrapassou o limite de " + max + " caracteres").attr("class", "alert-error");
return false;
}
$("input[type='submit']").attr("disabled", true);
var parametros = $("#quick_reply").serialize();
$.ajax({
type: "POST",
url: hrefResposta,
data: parametros + "&message=" + textEditorVal + "&post=1",
beforeSend: function (objeto) {
resAjax.html("Carregando...").attr("class", false);
},
success: function (dados) {
$("input[type='submit']").attr("disabled", false);
if ($('div.h3:contains("Revisão do tópico")', dados).length) {
resAjax.html("Uma nova mensagem foi adicionada no momento em que você escrevia a sua mensagem. Atualize a página para ver as alterações.").attr("class", "alert-error");
return;
}
var href = $("a[href^='/viewtopic']", dados).attr("href");
$.get(href, function (e) {
$(".post[id^='p']:last", e).hide().insertAfter(".post[id^='p']:last").slideDown("fast", function () {
$("html, body").animate({
scrollTop: $(".post[id^='p']:last").offset().top
}, 500);
});
resAjax.html("Postado com sucesso!").attr("class", "alert-success");
$("textarea").sceditor("instance").val("");
});
}
});
return false;
});
});
Preciso que o deixe aplicado e nos avise aqui para que possamos fazer os devidos testes.
o/
Re: Mensagem rápida (AJAX) com bugs
O seu avatar me dá muito, muuuuuuito medo (sorry) então sabe o quão difícil pra mim é dizer que eu serei imensamente grato pela ajuda. Espero que possa prosperar dentro da Staff. Muito obrigado
Re: Mensagem rápida (AJAX) com bugs
Existe algum tópico no seu fórum para que possamos disparar algumas mensagens de teste?
- Spoiler:
- Deep♂Dark♂Fantasies
Re: Mensagem rápida (AJAX) com bugs
Questão abandonada pelo autor, mas considerada resolvida por ter solução para o problema. Tópico marcado como Resolvido e movido para Questões resolvidas. |
Tópicos semelhantes
» Postar mensagem com ajax
» Ícones de mensagem com AJAX
» Deletar mensagem com ajax
» Mudar ícone de mensagem com AJAX
» [Plugin] Deletar mensagem via AJAX (sem atualizar a página)
» Ícones de mensagem com AJAX
» Deletar mensagem com ajax
» Mudar ícone de mensagem com AJAX
» [Plugin] Deletar mensagem via AJAX (sem atualizar a página)
Fórum dos Fóruns :: Ajuda e atendimento ao utilizador :: Questões sobre códigos :: Questões resolvidas sobre códigos Javascript e jQuery
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos