Répétez l'appel jQuery ajax
Comment répéter l'appel jQuery ajax toutes les 10 Secondes?
$(document).ready(function() {
$.ajax({
type: "GET",
url: "newstitle.php",
data: "user=success",
success: function(msg) {
$(msg).appendTo("#edix");
}
});
J'ai essayé d'envelopper le $.ajax avec une fonction et appeler la fonction avec setInterval
$(document).ready(function() {
function ajaxd() {
$.ajax({
type: "GET",
url: "newstitle.php",
data: "user=success",
success: function(msg) {
$(msg).appendTo("#edix");
}
});
}
setInterval("ajaxd()",10000);
});
, Mais il dit "ajaxd n'est pas défini"
3 réponses
Votre méthode ne doit pas être placée à l'intérieur de la méthode ready, ou elle ne serait que disponible là-bas et non à l'extérieur.
$(document).ready(function() {
setInterval("ajaxd()",10000);
});
function ajaxd() {
$.ajax({
type: "GET",
url: "newstitles.php",
data: "user=success",
success: function(msg){
$(msg).appendTo("#edix");
}
});
}
$(document).ready(function() {
setInterval(function() {
$.ajax({
type: "GET",
url: "newstitle.php",
data: "user=success",
success: function(msg){
$(msg).appendTo("#edix");
}
});
}, 10000);
});
Une meilleure approche serait d'utiliser setTimeout
, donc vous ne faites une requête que lorsque la précédente est terminée.
Comment cela devrait être fait
Imaginez que la requête pour une raison quelconque (dysfonctionnement du serveur, Erreur réseau) prend plus de temps que le temps défini. Vous aurez beaucoup de demandes simultaneus, ce qui n'est pas bon. Et si vous décidez de raccourcir la différence de temps de 10 seonds à 1 seconde dans le futur?
$(function() {
var storiesInterval = 10 * 1000;
var fetchNews = function() {
console.log('Sending AJAX request...');
$.ajax({
type: "GET",
url: "newstitles.php",
data: {
user: 'success',
some: ['other', 'data']
}
}).done(function(msg) {
$(msg).appendTo("#edix");
console.log('success');
}).fail(function() {
console.log('error');
}).always(function() {
// Schedule the next request after this one completes,
// even after error
console.log('Waiting ' + (storiesInterval / 1000) + ' seconds');
setTimeout(fetchNews, storiesInterval);
});
}
// Fetch news immediately, then every 10 seconds AFTER previous request finishes
fetchNews();
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
Je sais, après 6 ans. Mais encore, je pensé que ça vaut pour d'autres personnes.
Pourquoi le code de L'OP n'a pas fonctionné?
Il est à noter que votre code n'a pas fonctionné principalement, car vous avez passé votre appel de fonction ajaxd()
en tant que chaîne à setInterval
. C'est pas une bonne pratique, en partie parce que les setInterval
attendent les fonctions de définie globalement. Vous devez utiliser une référence à une fonction, comme dans mon exemple. De cette façon, peu importe où votre fonction est définie et si elle est anonyme ou non.