3
I have a online chat that works with ajax and PHP. Yet, oddly enough, when I enter only one question (?) and sending the jQuery, returns an error in the console. The ajax gets into the error() and the interrogation (?) is inserted into the seat, but with strange characters like:
jQuery33106296323571939269_1534100132138.
Javascript:
$('#envia_chat_id').keyup(function(e){
if(e.which === 13 & $('#envia_chat_id').attr('class') === 'envia_chat'){
if(trim($('.envia_chat').val()) != ''){
var msgenvio = $('.envia_chat').val();
var msgrender = msgenvio.replace(/</g, '<').replace(/>/g, '>');
$('#chat_box').append('<div class="msg user_' + $('.time_user').val() + '"><span>'+ $('.nick_user').val() + ': </span>'+ msgrender +'</div)');
$('.envia_chat').val('');
$('.envia_chat').removeAttr('class');
$('#chat_box').scrollTop($('#chat_box').prop("scrollHeight"));
$('#envia_chat_id').attr('placeholder','Aguarde para enviar outra...');
console.log('msg='+ msgenvio + '&type=enviaMsg&lobby=' + $('.lobbyid').val() + '&time=' + $('.time_user').val() + '&nick=' + $('.nick_user').val());
$.ajax({
url:'chat.php',
dataType: 'JSON',
type: 'POST',
data: 'msg='+ msgenvio + '&type=enviaMsg&lobby=' + $('.lobbyid').val() + '&time=' + $('.time_user').val() + '&nick=' + $('.nick_user').val(),
success: function(data){
console.log(data);
setTimeout(function(){
$('#envia_chat_id').attr('class','envia_chat');
$('#envia_chat_id').attr('placeholder','Chat...');
}, 4000);
},
error: function(data){
console.log(data);
$('#chat_box').append('<div class="msg msg_erro">Tente novamente enviar esta mensagem.</div)');
$('#chat_box').scrollTop($('#chat_box').prop("scrollHeight"));
$('#envia_chat_id').attr('class','envia_chat');
$('#envia_chat_id').attr('placeholder','Chat...');
}
});
}
}
});
PHP:
<?php
session_start();
function Erro($texto){
$array = array('status' => $texto);
return json_encode($array, JSON_PRETTY_PRINT);
}
function Sucesso($texto){
$array = array('status' => $texto);
return json_encode($array, JSON_PRETTY_PRINT);
}
if(isset($_SESSION['login_id']) and !empty($_SESSION['login_id']) and isset($_POST['type']) and isset($_POST['lobby']) and is_numeric($_POST['lobby']) == true){
require('connection.php');
$id = $_SESSION['login_id'];
$acao = $_POST['type'];
$id_lobby = (is_numeric($_POST['lobby'])==true) ? $_POST['lobby'] : NULL;
$tempo_atual = date("Y-m-d H:i:s");
$msg = (isset($_POST['msg'])==true and $_POST['msg'] != '') ? filter_var($_POST['msg'], FILTER_SANITIZE_SPECIAL_CHARS) : NULL;
$time = (isset($_POST['time']) == true and $_POST['time'] == 'azul' or $_POST['time'] == 'laranja' or $_POST['time'] == 'ambos') ? $_POST['time'] : NULL;
$nick = (isset($_POST['nick']) == true) ? $_POST['nick'] : NULL;
if(trim($msg) != NULL and $time != NULL and $nick != NULL){
$insere_msg = mysqli_query($conexao, "INSERT INTO chat (id_user, content, id_lobby, timestamp, time, nick) VALUES ('$id', '$msg', '$id_lobby', '$tempo_atual', '$time', '$nick')");
if($insere_msg === true){
echo Sucesso('success');
}
}else{
echo Erro('erro_null');
}
}else{
echo Erro('erro_faltam');
}
?>
Tip: use
JSON_PRETTY_PRINTonly under development. In production, the cost of displaying the formatted json can be great due to spaces and line breaks added to the return.– Wallace Maxters