Глобальные переменные Javascript в Webkit - PullRequest
2 голосов
/ 29 ноября 2010

У меня Chrome 7.0, и я пытаюсь получить доступ к полям глобального объекта. Код отлично работает в Firefox и IE, но отладчик Chrome никуда не помогает. Я пробовал Safari, и у него тоже были проблемы.

Я могу получить значение таймера, но когда я получаю доступ к состоянию через консоль, я получаю "[object Object]". status.completedJobs возвращает undefined даже после status = $.parseJSON(msg.d); (допустима строка json).

Я не уверен, что делать после этого. Вызов $.parseJSON(msg.d); из консоли работает, и я могу просматривать поля объекта с помощью отладчика. Как получить статусный объект, правильно назначенный и глобально доступный?

Вот мой код:

//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);
}

1 Ответ

5 голосов
/ 29 ноября 2010

Попробуйте использовать другое имя, кроме status , есть предопределенный элемент window (window - глобальный объект в JS на основе браузера), называемый "status".Также было бы хорошо, если бы вы присвоили глобальную переменную объекту окна, чтобы избежать конфликтов, если в текущей (не глобальной) области существует переменная с таким же именем:

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