Alltså dubbla \. Bara \n skrivs av PHP ut som en radbrytning. Det kanske FF tacksamt tuggar i sig medan IE spottar ut. \\ blir till ett \ så att vad webbläsaren ser är \n som i en js-sträng blir till en radbrytning.
Det sjuka är att när jag kör dubbla, så skrivs \n ut i boxen:
Ett fel uppstod\n - Ange ditt användarnamn - Ange ditt lösenord
Hur man än vänder och vrider på det bör det ju bli en radbrytning i det fallet.
Har testat nu att skriva ut samma data i en textarea, och där står exakt samma sak som i alertrutan.
Kan tillägga att det här är en response från Ajax, om det gör någon skillnad?
Har testat att sätta content-type i dokumentet, men det blir ingen skillnad.
Inte konstigt, men dumt. Det beror på IE's sätt att tolka HTML. Ett liknande problem diskuterades nyligen här. Det går ev att lösa genom att använda en annan doctype eller annan mime-typ för dokumentet. Men det löser inte ditt problem eftersom det då skulle stå <br /> istället flr <BR>.
Jag rekommenderar att du kör med dubbelt \ och sen lägger till följande rad i din javascript-funktion.
str = str.replace(/\\n/i, "\n");
Det är en smått ful lösning men den fungerar iaf. Jag har ingen aning om hur man gör detta på "rätt" sätt med IE.
Nu har jag ett nytt fel, som bara uppenbarar sig i explorer.
Har den här funktionen, som hanterar återställning av lösenord:
function cbResetPasswd (response){
result = response.split("|");
status = parseInt(result[0]);
if(status == 200){
alert("Ditt nya lösenord har skickats till den e-postadress du angav.\n");
showLogin();
}else if(status == 201){
alert("Ditt nya lösenord kunde inte skickas.\nFörsök igen eller kontakta oss.\n");
showLogin();
}else{
message = "An error occurred:\n";
for(i = 1; i <= result.length - 1; i++){
message += " - " + result[i ] + "\n";
}
showLayer("site-overall");
showLayer("passwd-recovery-form");
hideLayer("site-loading");
alert(message);
}
}
Det funkar så att en php sida skickar en response till funktionen ovan i form av:
Sen splittar jag strängen med | och kollar vad statuskoden är.
Om jag kör alert på response får jag 200|Success och kör jag en alert på result[0] får jag 200, men ifsatsen ovan resulterar i else.
Pröva att lägg till de raderna, precis som de står och se vad du får tillbaka. Min bästa gissning är att du av någon anledning får ett nyradstecken eller annat skräp i början av raden.
Men hur kan det komma sig att variabeln status inte sätts korrekt om jag kör utan var?
Nu kom jag äntligen på det. status refererar till window.status som säkert ställer till det på något sätt. Så är det i allmänhet. Skulle du ha skrivit foo = 42; och foo inte skulle vara definierat någon annanstans, så sätter du egentligen window.foo. Och just med status skapar det uppenbarligen problem.
När du använder var, deklarerar du en lokal variabel, och får inte den krocken. Allmänt tips: I regel bör man alltid deklarera lokala variabler med var, även/särskilt i for-slingor. Annars kan man få namn-krockar med skumma buggar som följd.
for(var i=0; i<bar.length; i++){/* rätt */}
for(i=0; i<bar.length; i++){/* fel */}