2009-02-21 9 views
2

J'essaie de faire une simple mise à jour ajax d'un div à partir d'un fichier php qui obtient des données à partir d'une base de données mysql. Une fonction remplit la div, l'autre ajoute des messages à la base de données et est appelée en cliquant sur un bouton de soumission. Je me demandais si quelqu'un pouvait me donner leurs équivalents en jquery. Voici les versions du prototype.conversion du prototype en jquery

<script> 
function getMessages(){ 
    new Ajax.Updater('chat','messages.php', { 
    onSuccess:function(){ 
     window.setTimeout(getMessages, 3000); 
    } 
    }); 
} 
getMessages(); 
</script> 

<script> 
function addmessage(){ 
    new Ajax.Updater('chat','add.php',{ 
    method:'post', 
    parameters: $('chatmessage').serialize(), 
    onSuccess: function() { 
     $('messagetext').value = ''; 
    } 
    }); 
} 
</script> 

Répondre

9

L'appel jQuery .ajax() fait tout. Il a des wrappers avec moins de paramètres comme .get(), .post() et .load() que vous pouvez utiliser pour une syntaxe moins verbeuse.

Vous ne mentionnez pas le format dans lequel les données sont récupérées. Vous devez spécifier dans l'appel .ajax(). En gros:

function addMessage(message) { 
    $.ajax({ 
    url: 'add.php', 
    success: function() { 
     $("#chatmessage").text(''); 
    }, 
    error: function() { ... }, 
    timeout: 3000, 
    data: { 
     message: message 
    } 
    }); 
} 

function getMessages() { 
    $.ajax({ 
    url: 'messages.php', 
    dataType: 'html', 
    timeout: 3000, 
    error: function() { ... }, 
    success: function(data) { 
     $("#messages").html(data); 
    } 
    }); 
} 

Note: le paramètre dataType a juste besoin de faire correspondre quel que soit le script produit. Si messages.php produit, disons, une liste HTML de messages, alors définissez le dataType à "html". Si tel est le cas, vous pouvez également simplifier le code:

function getMessages() { 
    $("#messages").load("message.php"); 
} 

Note: la fonction load() est juste une enveloppe autour .ajax(). Utilisez .ajax() si vous devez définir des choses comme les délais d'attente, la gestion des erreurs, etc. Par exemple:

<div id="messages"></div> 
<input type="button" id="getmessages" value="Get Messages"> 
... 
<script type="text/javascript"> 
$(function() { 
    $("#getmessages").click(function() { 
    $(this).attr("disabled", "true"); 
    $.ajax({ 
     url: 'message.php', 
     dataType: "html", 
     timeout: 5000, 
     error: function() { 
     alert("Error talking to server."); 
     $(this).attr("disabled", "false"); 
     }, 
     success: function(data) { 
     $("#messages").html(data); 
     $(this).attr("disabled", "false"); 
     } 
    }); 
    }); 
}); 
</script> 

Ce qui précède est un exemple plus complet et devrait vous donner une idée de ce que vous pouvez utiliser les paramètres supplémentaires pour . Si vous n'en avez pas besoin, utilisez simplement les versions abrégées.

+0

Je suis assez nouveau à cela, mais je suis sûr que les données apparaît comme html. Y at-il quelque chose de spécifique que je devrais changer pour cela à partir du code ci-dessus? Vous êtes vraiment génial avec la rapidité avec laquelle vous répondez, merci encore. –

+0

Eh bien votre script (messages.php) écrira sa sortie dans un format spécifique, par exemple HTML, XML, JSON, etc. Le point du paramètre dataType est de correspondre à tout ce que votre script produit. S'il produit html, définissez dataType sur html. – cletus

+0

Non, la fonction $ (..) .html() met à jour le innerHTML de l'élément. Il ne devrait pas y avoir de problème si le contenu retourné est html il sera placé dans le div #messages et analysé par le navigateur en conséquence. –

1
$.ajax({ 
    type: "GET", 
    url: "messages.php", 
    data: "name=John&location=Boston", 
    success: function(){ 
     window.setTimeout(getMessages,3000); 
    } 
}); 

pour la deuxième addMessage

$.ajax({ 
    type: "POST", 
    url: "add.php", 
    data: $('#chatmessage').param(), 
    success: function() { 
     $('messagetext').value = ''; 
    } 
}); 

pour plus de détails jeter un oeil à http://docs.jquery.com/Ajax

+0

pour l'addmessage, il semble y avoir quelque chose qui ne va pas. Donc, add.php fournit également une requête mise à jour de la base de données au format html. en cas de succès, ceci est supposé être mis dans le chat div. messagetext est en fait la valeur de la zone de texte envoyée à add.php. De quoi aurais-je besoin pour changer? Merci encore. –

+0

oh très simple, il suffit de changer la définition de la fonction de réussite à cette fonction (données) { $ (« texte_du_message ») valeur. = Données } alors que les données contiendront tout ce qui sera envoyé par ur réponse. – Gripsoft

Questions connexes