Postare si afisare cu ajax tip chat
Discutii si intrebari legate de scripturi si functii JavaScript, jQuery si Ajax, cod JavaScript in general.
-
royal27
- Mesaje:79
Postare si afisare cu ajax tip chat
Salut
Am un script care posteaza instantaneu dar nu face afisarea instantanee ca la un chat (cu refresh), problema e ca campul de postare si codul de inserare si afisare ce s-a postat se afla in acelasi fisier.
As vrea sa introduc un cod jquery sa afiseze instantaneu ce s-a postat.
Ma poti ajuta sa rezolv aceasta problema?
aici e forma de postare fara refresh
Cod: Selectaţi tot
<form id="contact-form" class="bl_form text-center" action="<?php echo "index.php?page=rooms&room=$rid&rpw=$rpw&r=$r"; ?>" method="post" novalidate>
<span class="field-wrap scrollimation fade-right">
</span>
<span class="field-wrap scrollimation fade-left">
<textarea id="contact-message" name="message" rows="5" class="label_better requiredField" data-new-placeholder="Message"
placeholder="Message" style="margin: 0px; width: 1210px; height: 88px;" data-error-empty="<?php echo "$insert_message"; ?>"></textarea>
</span>
<p class="text-center"><button name="sy2" id="submit_post" type="submit" class="btn btn-sm btn-primary icon-left" data-error-
message="Error!" data-sending-message="Sending..." data-ok-message="Message Sent"><i class="fa fa-paper-plane"></i>Send Message</button></p>
<input type="hidden" name="submitted" id="submitted" value="true" />
<?php echo "<postfield name=\"message\" value=\"$(message)\"/>"; ?>
</form>
Asta e codul final de afisare mesajele din baza de date
Cod: Selectaţi tot
<?php echo make_clickable($tosay)."$link_stergere"; ?>
eu am un raspuns dar imi arata doar numele dupa ce postez,mesajul.
Cod: Selectaţi tot
$('body').on('submit', '#contact-form', function(){
$.post({$(this).attr("action"), $(this).serialize(), function(data){
if(data){
alert(data.message);
}
}, 'json');
return false;
});
And the server side
Cod: Selectaţi tot
<?php
if($_SERVER['REQUEST_METHOD'] === 'POST'){
// do your thing here
echo json_encode(array("message" => make_clickable($tosay).$link_stergere));
die();
}
?>
MarPlo
Mesaje:4343
Salut
In ajax trebuie sa vezi ce returneaza codul din php.
Adaugi:
Cod: Selectaţi tot
if(data){
console.log(data);
alert(data.message);
}
Si vezi in consola la browser ce contine argumentul data.
royal27
Mesaje:79
stai ca am facut altceva, imi returneaza pagina respectiva la 5 secunde,dar vreau sa fac sa postez instantaneu..(forma e facuta sa posteze fara refresh) dar nu reusesc sa fac functia de afisare instantaneu. Imi poti da un exemplu de post cu tot cu display cu linkul asta?
Cod: Selectaţi tot
index.php?page=roomsend&room=$rid&rpw=$rpw&r=$r
Cod: Selectaţi tot
<script>
(function($)
{
$(document).ready(function()
{
$.ajaxSetup(
{
cache: false,
beforeSend: function() {
$('#content').hide();
$('#loading').show();
},
complete: function() {
$('#loading').hide();
$('#content').show();
},
success: function() {
$('#loading').hide();
$('#content').show();
}
});
var $container = $("#content");
$container.load("<?php echo "index.php?page=roomsend&room=".$_GET["room"]."";
?>");
var refreshId = setInterval(function()
{
$container.load('<?php echo "index.php?page=roomsend&room=".$_GET
["room"].""; ?>');
}, 5000);
});
})(jQuery);
</script>
<form id="contact-form" class="bl_form text-center" action="<?php echo
"index.php?page=roomsend&room=$rid&rpw=$rpw&r=$r"; ?>" method="post"
novalidate>
<span class="field-wrap scrollimation fade-
right">
</span>
<span
class="field-wrap scrollimation fade-left">
<textarea id="contact-message"
name="message" rows="5" class="label_better requiredField" data-new-
placeholder="Message" placeholder="Message" style="margin: 0px; width: 1210px;
height: 88px;" data-error-empty="<?php echo "$insert_message"; ?>"></textarea>
</span>
<p class="text-center"><button name="sy2"
id="submit_post" type="submit" class="btn btn-sm btn-primary icon-left" data-error-
message="Error!" data-sending-message="Sending..." data-ok-message="Message Sent"><i
class="fa fa-paper-plane"></i>Send Message</button></p>
<input type="hidden" name="submitted"
id="submitted" value="true" />
<?php echo "<postfield name=\"message\"
value=\"$(message)\"/>"; ?>
</form>
- am tot intrebat pe stackoverflow dar astia nu prea te ajuta cu mare lucru.
MarPlo
Mesaje:4343
Ideea e asa, la setInterval() se apeleaza o functie care face apelul ajax, primeste raspunsul si il afiseaza intr-un element in pagina (dupa ID) cu innerHTML.
Cam asa:
Cod: Selectaţi tot
var elm_chat = document.getElementById('idul');
setInterval(function(){
//aici se face apelul ajax, in care, la primirea raspunsului se aplica:
elm_chat.innerHTML = 'raspunsul de la php';
}, 5000);
Iar in 'raspunsul de la php' trebuie sa ai postarile care vrei sa le afisezi, selectate si returnate de php.
royal27
Mesaje:79
la pagina asta trimite postarile si tot pagina asta le returneaza
index.php?page=roomsend&room=$rid&rpw=$rpw&r=$r
iar forma de postare e in alta pagina cu codul jquery/ajax.
MarPlo
Mesaje:4343
Cred ca cel mai bine e sa ai un fisier php separat de index, de exemplu "chat.php" in care adaugi codul php de inregistrare si afisare postari, ca sa nu mai fie afectat de codul din "index.php".
De exemplu, asa in "chat.php":
Cod: Selectaţi tot
if(isset($_POST['message'])){
//se inregistreaza postarea
}
// aici se definesc variabilele necesare: $tosay, $link_stergere precum si ce functie mai trebuie, si afisezi postarile
echo make_clickable($tosay).$link_stergere;
Iar in scriptul ajax, cand se adauga mesaj il transmiti prin "post" la "chat.php". Si tot acest fisier il accesezi cu ajax in setInterval() si obtii datele returnate de "echo".
Cod: Selectaţi tot
//inregistrare postare
$('body').on('submit', '#contact-form', function(){
$.post('chat.php', $(this).serialize(), function(resp){
alert(resp);
});
return false;
});
//afisare la interval de timp
setInterval(function(){
$('#content').load('chat.php');
}, 5000);
Incearca, vezi ce iese.
royal27
Mesaje:79
scuze de intarziere dar in seara asta am reusit sa refac scriptul care mi-ai dat tu...nu am avut timp pana acum,merge perfect,mersi mult pentru ajutor si o sa recomand site-ul tau
Subiecte similare
- Afisare numar cel mai mare dintr o coloana
PHP - MySQL - XML
Primul mesaj
Bună Marplo
Vreau să extrag din coloan pret cel mai mare numar ca de exemplu 4444.
Mie imi afisează 54 în loc de 4444, dacă în loc de 4444 modific...
Ultimul mesaj
Am schimbat `pret` varchar(20) DEFAULT NULL in `pret` int(11) NOT NULL ca la tine si merge.
Multumesc