2010-11-29 16 views
2

Ich habe Chrome 7.0 und versuche, auf Felder eines globalen Objekts zuzugreifen. Der Code funktioniert perfekt in Firefox und IE, aber der Debugger von Chrome hilft mir nicht, irgendwohin zu kommen. Ich habe Safari ausprobiert und es hat auch Probleme.Globale JavaScript-Variablen in Webkit

Ich kann den Wert des Timers erhalten, aber wenn ich den Status über die Konsole zugreifen, bekomme ich "[object Object]". status.completedJobs gibt undefined zurück, auch nach status = $.parseJSON(msg.d); (JSON-String ist gültig).

Ich bin mir nicht sicher, was ich danach machen soll. Aufruf von $.parseJSON(msg.d); von der Konsole funktioniert und ich bin in der Lage, die Felder des Objekts mit dem Debugger anzuzeigen. Wie bekomme ich den Status Objekt richtig zugewiesen und global zugänglich?

mein Code hier:

//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

Haben Sie versucht, 'console.dir() '? – aditya

+0

Sind Sie sehr sicher über 'msg.d'? Und welche Daten erhalten Sie zurück? – Harmen

+0

Danke für die schnellen Antworten Jungs. 'console.dir()' ergibt 'undefined'. msg.d Antwort ist: '{" d ":" {\ "numJobs \": 269389, \ "completedJobs \": 102423, \ "running \": true} "}' – checker

Antwort

5

versuchen Sie einen anderen Namen als Status mit, gibt es ein vordefiniertes Mitglied Fenster (Fenster ist das globale Objekt in Browser-basierten JS) namens "Status". Es wäre auch gut, wenn Sie die globale Variable des Fenster-Objekt zuweisen, um Konflikte zu vermeiden, wenn es eine Variable in dem aktuellen (nicht global) Umfang mit dem gleichen Namen existiert:

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

Funktioniert perfekt über alle! Danke für die Hilfe, ich bin so etwas wie ein Javascript-Noob. – checker

+0

schön finden Dr.Molle. Wenn ich die Konsole in Chrome hochziehe und in StackOverflow und auch bei Google "Status" tippe, kann ich sehen, dass sie definiert ist – Matt