2010-11-29 39 views
2

J'ai Chrome 7.0 et essaie d'accéder aux champs d'un objet global. Le code fonctionne parfaitement dans Firefox et IE, mais le débogueur de Chrome ne m'aide pas à aller n'importe où. J'ai essayé Safari et il a aussi des problèmes.variables Global Javascript dans Webkit

je peux obtenir la valeur de la minuterie, mais quand j'accéder à l'état via la console j'obtenir "[object Object]". status.completedJobs retours undefined même après status = $.parseJSON(msg.d); (chaîne JSON est valide).

Je ne suis pas sûr de quoi faire après cela. L'appel $.parseJSON(msg.d); à partir de la console fonctionne et je suis en mesure d'afficher les champs de l'objet avec le débogueur. Comment puis-je obtenir l'objet Statut correctement affecté et globalement accessible?

Voici mon code:

//Object that holds result of AJAX request 
var status = new Object(); 
//Refresh timer variables 
var timer; 
var timer_is_on = 0; 

$(document).ready(function() { 
    update(); 
    doTimer(); 
}); 

/** 
* Performs the AJAX request and updates the page 
*/ 
function update() { 
    $.ajax({ 
     type: "POST", 
     url: "Default.aspx/getStatus", 
     data: "{}", 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: function(msg) { 
      if (msg) { 
       try { 
        status = $.parseJSON(msg.d); 
       } catch (e) { 
        console.log(e); 
       } 
       updateProgressBar(); 
      } 
     } 
    }); 
} 

function updateProgressBar() { 
    var percent = Math.round(status.completedJobs/status.numJobs * 100); 
    $('#progressPercentage').text(percent + '%'); 
    $('#progressbar').progressbar({ 
     value: percent 
    }); 
} 

/** 
* Used to initialize the timer. 
*/ 
function doTimer() { 
    if (!timer_is_on) { 
     timer_is_on = 1; 
     timedCount(); 
    } 
} 

/** 
* Executed on every time interval. 
*/ 
function timedCount() { 
    update(); 
    timer = setTimeout("timedCount()", 3000); 
} 
+0

Avez-vous essayé 'console.dir() '? – aditya

+0

Êtes-vous très sûr de 'msg.d'? Et quelles données obtenez-vous? – Harmen

+0

Merci pour les réponses rapides les gars. 'console.dir()' 'dans les résultats undefined'. La réponse de msg.d est: '{" d ":" {\ "numJobs \": 269389, \ "completedJobs \": 102423, \ "running \": true} "}' – checker

Répondre

5

Essayez d'utiliser un autre nom que état, il est membre prédéfini de fenêtre (fenêtre est l'objet global dans basé sur un navigateur JS) appelé « statut ». Il serait également bon si vous attribuez la variable globale à la fenêtre objet pour éviter les conflits s'il existe une variable dans la portée actuelle (non globale) avec le même nom:

window['statusVar'] = $.parseJSON(msg.d); 
+0

Fonctionne parfaitement à travers tous! Merci pour l'aide, je suis un peu un javascript noob. – checker

+0

belle trouvaille Dr.Molle. Tirer la console dans Chrome et en tapant «statut» juste ici sur StackOverflow et aussi sur Google, je peux le voir est défini – Matt