2009-10-21 7 views
0

J'ai le javascript suivant mais je rencontre des problèmes dans l'utilisation setTimeout, à savoir:Utilisation setTimeout Questions

function setUrl() 
{ 
    // Get system URL details 
    var url_path = new String(window.location.pathname); 

    var new_url; 

    new_url = window.location.host; 
    } 
    setTimeout("setValue('ONE_UP_URL',new_url);",2000); 
} 

Mais pour une raison quelconque, je reçois l'erreur: « new_url » est pas défini.

Nous vous remercions de votre aide lors de l'appel de cette fonction javascript en utilisant setTimeout.

Merci.

Répondre

7

Ne pas utiliser une chaîne comme premier argument de l'appel de fonction setTimeout , utilisez une fonction anonyme.

Vous avez également une accolade supplémentaire:

function setUrl() { 
    // Get system URL details 
    var url_path = window.location.pathname, 
     new_url = window.location.host; 

    setTimeout(function() { 
    setValue('ONE_UP_URL',new_url); 
    }, 2000); 
} 

Si vous utilisez une chaîne, il sera évalué et ce n'est pas vraiment recommended.

Évaluer le code à l'aide eval (et ses parents, Function, setTimeout et setInterval) est considéré comme dangereux, car ils exécutent le code que vous passez avec les privilèges de l'appelant, et presque tous les temps il y a une solution de contournement à évite-les.

Autres choses mineures:

  • L'appel au constructeur String dans votre code est redondant, puisque window.location.pathname est déjà une chaîne. Vous pouvez déclarer vos variables de fonction sur une instruction single var.
+0

+1 pour les détails supplémentaires. – ChaosPandion

6

Vous avez une accolade fermante. Soit il n'y a plus de code manquant, ou vous avez juste besoin de le supprimer. (. La ligne ci-dessus setTimeout)

En outre, vous devez remplacer:

setTimeout("setValue('ONE_UP_URL',new_url);",2000); 

avec ceci:

setTimeout(function() { setValue('ONE_UP_URL', new_url); }, 2000); 
1

Essayez de mettre à jour à quelque chose comme:

function setValue(s, variable) { 
    alert(s); 
    alert(variable); 
} 

function setUrl() 
{ 
    // Get system URL details 
    var url_path = window.location.pathname, 
     new_url = window.location.host; 

    setTimeout(
    function() { 
     setValue('ONE_UP_URL',new_url); 
    }, 2000); 
} 
+0

Ceci est la troisième copie de la bonne réponse. Ne devriez-vous pas supprimer cela? – ChaosPandion

+0

Vous n'avez honnêtement pas vu des réponses en double sur SO avant? Et dans ma solution, j'ai pris le temps d'écrire la fonction setValue pour démontrer, en plus de nettoyer plus de code. –

+0

Comment les déclarations multiples sur une seule ligne * sont-elles plus claires? Vous avez réellement réduit la lisibilité. –