funcion - Repetir jQuery ajax call
setinterval jquery ajax (3)
¿Cómo repetir jQuery ajax call cada 10 segundos?
$(document).ready(function() {
$.ajax({
type: "GET",
url: "newstitle.php",
data: "user=success",
success: function(msg) {
$(msg).appendTo("#edix");
}
});
He intentado 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 afuera.
$(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 utilizar setTimeout
, por lo que solo se realiza una solicitud cuando se realiza la anterior.
Como se debe hacer
Imagine que la solicitud por algún motivo (mal funcionamiento del servidor, error de red) lleva más tiempo que el tiempo definido. Tendrás muchas solicitudes simultáneas, lo cual no es bueno. ¿Y si decide acortar la diferencia horaria 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 vale la pena para otras personas.
¿Por qué el código OP no funcionó?
Vale la pena notar que su código no funcionó principalmente, porque pasó su ajaxd()
como una cadena a setInterval
. No es una buena práctica , en parte porque setInterval
esperará que las funciones se definan globalmente . Deberías usar 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);
});