¿Cómo repetir la llamada jQuery ajax cada 10 segundos?
$(document).ready(function() { $.ajax({ type: "GET", url: "newstitle.php", data: "user=success", success: function(msg) { $(msg).appendTo("#edix"); } });Intenté envolver el $.ajax con una función y llamar a la función con setInterval
$(document).ready(function() { function ajaxd() { $.ajax({ type: "GET", url: "newstitle.php", data: "user=success", success: function(msg) { $(msg).appendTo("#edix"); } }); } setInterval("ajaxd()",10000); });Pero dice "ajaxd no está definido"
Su método no debe colocarse dentro del método listo , o solo estaría disponible allí y no fuera.
$(document).ready(function() { setInterval(ajaxd, 10000); }); function ajaxd() { $.ajax({ type: "GET", url: "newstitles.php", data: "user=success", success: function(msg){ $(msg).appendTo("#edix"); } }); }Un mejor enfoque sería usar setTimeout , por lo que solo realiza una solicitud cuando finaliza la anterior.
Imagine que la solicitud por alguna razón (mal funcionamiento del servidor, error de red) toma más tiempo del definido. Tendrás muchas solicitudes simultáneas, lo cual no es nada bueno. ¿Y si decide acortar la diferencia de tiempo de 10 segundos a 1 segundo en el futuro?
$(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>Lo sé, después de 6 años. Pero aún así, pensé que valía la pena para otras personas.
Vale la pena señalar que su código no funcionó principalmente porque pasó su llamada a la función ajaxd() como una cadena a setInterval . No es una buena práctica , en parte porque setInterval esperará que las funciones se definan globalmente . Debe usar la referencia a una función, como en mi ejemplo. De esa manera, no importa dónde esté definida su función y si es anónima o no.
$(document).ready(function() { setInterval(function() { $.ajax({ type: "GET", url: "newstitle.php", data: "user=success", success: function(msg){ $(msg).appendTo("#edix"); } }); }, 10000); });