Sam pomysł z tym gdzie umieścić to czyszczenie z metodą replace masz jak najbardziej dobry. Ino coś chyba namieszałeś z tymi cudzysłowami w setTimeout i przez to kod "się nie kompiluje" (pamiętaj, że w JavaScripcie możesz zamykać stringi zarówno w cudzysłowach, jak i apostrofach).
Ale ponownie, lepiej to zrobić po prostu inaczej ;-). Bez cudzysłowów, omijając tego typu problemy.
Jako pierwszy parametr setTimeout nie powinno się podawać stringa z kodem do wykonania. Jest to możliwe, ale to tak, jakbyś zrobił eval. A jak wiadomo, eval is evil. Zamiast tego funkcji setTimeout przekazuje się w pierwszym argumencie inną funkcję.
Czyli piszesz sobie gdzieś funkcję redirect:
function redirect() {
var cleanResponseText = xHRObject.responseText.replace(/[\n\r](?:.|[\n\r])*/, '');
window.location.href="tematy.php?forum=" + cleanResponseText;
}
A w funkcji getData przekazujesz ją do setTimeout:
function getData()
{
if(xHRObject.readyState == 4)
{
setTimeout(redirect, 1000);
}
}
Co ciekawe, ponieważ funkcji redirect używasz tylko wewnątrz getData, możesz -- w ramach hermetyzacji -- umieścić ją wewnątrz funkcji getData:
function getData()
{
function redirect() {
var cleanResponseText = xHRObject.responseText.replace(/[\n\r](?:.|[\n\r])*/, '');
window.location.href="tematy.php?forum=" + cleanResponseText;
}
if(xHRObject.readyState == 4)
{
setTimeout(redirect, 1000);
}
}
To po prostu funkcja zagnieżdżona -- redirect jest widoczna tylko wewnątrz getData.
Co być może jeszcze ciekawsze, ponieważ funkcji zagnieżdżonej używasz tylko raz, nie musisz jej nawet nadawać nazwy (redirect), bo chcesz ją po prostu raz utworzyć i przekazać do setTimeout, nic więcej. Możesz więc użyć funkcji anonimowej, o tak:
function getData()
{
if(xHRObject.readyState == 4)
{
setTimeout(function() {
var cleanResponseText = xHRObject.responseText.replace(/[\n\r](?:.|[\n\r])*/, '');
window.location.href="tematy.php?forum=" + cleanResponseText;
}, 1000);
}
}