Problem jest taki:
Mam skrypt, który ajaxem wysyła dane do skryptu php i odbiera wyniki. Po otrzymaniu pierwszej porcji wyników wstrzymuje działanie na określony czas i po tym czasie wywołuje się po raz kolejny. Chcę żeby działo się tak tak długo jak skrypt php będzie miał co robić (wysyłka newslettera). Jeżeli skrypt php wyśle wszystkie mejle chcę żeby działanie skryptu wywołującego się zakończyło. I tutaj mam problem, bo po otrzymaniu komunikatu o wysłaniu wszystkich mejli skrypt odczekuje swój interwał czasowy i działa dalej.
Oto kod:
function wyslijSzablon() { xmlhttp = typeof XMLHttpRequest == "undefined" ? new ActiveXObject('Microsoft.XMLHttp'):new XMLHttpRequest(); document.getElementById("loading").style.display="block"; var distList = document.getElementById("dist_list").value; var selectTemplate = document.getElementById("html_template").value; var postSubject = document.getElementById("subject").value; var postNewsletter = document.getElementById("newsletter").value; var url = "template_engine.php"; var params = "dist_list=" + encodeURIComponent(distList) + "&"; params += "html_template=" + encodeURIComponent(selectTemplate) + "&"; params += "newsletter=" + encodeURIComponent(postNewsletter) + "&"; params += "subject=" + encodeURIComponent(postSubject); xmlhttp.open("POST",url,true); xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); xmlhttp.send(params); xmlhttp.onreadystatechange = stateChanged; } function stateChanged() { if (xmlhttp.readyState == 4) { document.getElementById("head").style.display="block"; document.getElementById("head").innerHTML=xmlhttp.responseText; if (xmlhttp.responseText != 'Newsletter został wysłany do wszystkich subskrybentów.') { setInterval("wyslijSzablon()", 10000); } else { document.getElementById("loading").style.display="none"; } } } function GetXmlHttpObject() { if (window.XMLHttpRequest) { return new XMLHttpRequest(); } return null; }
Generalnie skrypt nie powinien się wywołać poraz kolejny kiedy otrzyma potwierdzenie o wysyłce mejli pod wszystkie adresy, niemniej i tak się wywołuje.
Zrobiłem:
if (xmlhttp.responseText != 'Newsletter został wysłany do wszystkich subskrybentów.') { setInterval("wyslijSzablon()", 10000); } else { document.getElementById("loading").style.display="none"; return false; }
Ale wtedy skrypt nie wykonuje się w ogóle. Próbowałem również z return false na końcu funkcji wyslijSzablon, ale wtedy skrypt również się nie wykonywał w ogóle. Może ktoś nakierować jak to rozwiązać?