2011-05-12 34 views
0

我的合作伙伴已經創建了一個腳本,但他目前處於脫機狀態,所以我正試圖自己修復此問題。工作在FF,Chrome而不是IE?怎麼了?

這是我們目前擁有的代碼:

function progressStatus(Progress) { 

    // Get our progress status 
    $.get('http://www.site.com/progress/'+Progress, { }, function (response) { 

     // Eval our response 
     eval(response); 
    }); 
} 

,然後在我們的頁面,我們有:

// Start our status checking 
var Progress = $('#Progress').val(); 
ProgressStatus = setInterval('progressStatus("'+Progress+'")', 1000); 

它工作正常,在Firefox,Chrome瀏覽器,所有我可以假設的是它的循環並在Firefox,Chrome中獲得新的地位,但是在IE中,它只會一次性改進進度,然後什麼都不做。

這有什麼問題?我不確定是否需要更多的代碼,如果是的話,我會用更多的代碼編輯我的問題。

謝謝。

+2

您是否收到任何錯誤訊息?順便說一句,在沒有驗證的情況下,在接收到的字符串中使用URL('Progress')和'eval'中的用戶輸入可能非常**非常危險。 – 2011-05-12 10:54:21

+0

開發人員工具說什麼?什麼是迴應? – Andreas 2011-05-12 10:54:24

+0

eval()===邪惡 – epascarello 2011-05-12 11:00:27

回答

1

不行的手段幾乎沒有。未來請詳細說明不工作的含義。我會假設它意味着它永遠不會更新獲取請求的新狀態,並且會一直抓住舊的狀態。

需要停止緩存

$.ajax({ 
    url: "http://www.site.com/progress/"+Progress, 
    cache: false, 
    success: function (response) { 
     // Evil Eval our response 
     eval(response); 
    } 
}); 
0

我認爲你需要把第二個代碼以這種方式,

$(document).ready(function(){ 

var Progress = $('#Progress').val(); 
ProgressStatus = setInterval('progressStatus("'+Progress+'")', 1000); 

} 

它可能在這個way.try這個,如果有用的。我不是很瞭解jQuery, ,但它會是一個解決方案,如果我沒有錯..

謝謝。

2

如果沒有response的值,並且沒有更多上下文,有點難以分辨。控制檯說什麼?有錯誤嗎?另外,爲什麼不從服務器獲取數據,然後解析數據並作出相應的響應,除了其他優勢(如將客戶端代碼保存在一個地方並強制執行結構)之外,還會使調試案例如此簡單?比它更好,只要相信任何回來的知道如何處理自己。

此外,作爲良好的做法,保持您的JavaScript在JavaScript中,而不是將被評估的字符串。因此,而不是你的setInterval的,有一個匿名函數:

ProgressStatus = setInterval(function(){ 
    progressStatus($('#Progress').val()); 
}, 1000); 
0

是否有你的setInterval的「」進度圍繞一個特定的原因是什麼? JavaScript不關心類型..

嘗試

ProgressStatus = setInterval(function(){ progressStatus(Progress); }, 1000); 

IMO它的漂亮,更易讀,但不知道它是否會解決你的問題:)

+1

每次調用progressStatus時,仍然使用相同的'Progress'值。 – 2011-05-12 11:07:16

1

至於有一個爲setInterval沒有標準,供給一個字符串作爲第一參數可以瀏覽器之間不同的結果。由於MDC says

code在備用語法中,是您想要重複執行的代碼字符串。

這是Firefox和Chrome展出的行爲。

另一方面,IE可能會解析字符串一次並重復執行該字符串。這會優化一些東西,但是每次都會用完全相同的參數調用你的函數。

此外,引用MDC再次

(使用此語法不建議在同樣的理由,使用eval()

的溶液。將該函數內讀取的Progress狀態多數民衆贊成一再呼籲:

function progressStatus() { 

    var Progress = $('#Progress').val(); 

    // Get our progress status 
    $.get('http://www.site.com/progress/'+Progress, { }, function (response) { 
            // ↑ don't! 
     // Eval our response 
     eval(response); // don't! 
    }); 
} 

這樣你可以簡單地調用

setInterval(progressStatus, 1000); 

但同樣,使用URL(Progress)和eval內的用戶可修改的輸入字段來解析(?),沒有任何形式的驗證的響應是非常不安全。你應該在閉包中使用一個變量(除了向用戶顯示外)。

1

我想問題是IE中的緩存問題。大多數情況下,IE會在設置中默認緩存。

你應該在最後添加一個隨機數,希望完全可以工作。

function progressStatus(Progress) { 

// Get our progress status 
$.get('http://www.site.com/progress/'+Progress + "/rnd/" + Math.random(), { }, function (response) { 

    // Eval our response 
    eval(response); 
}); 

}

您需要處理,如果任何URL重寫問題。

+0

完美,謝謝。 – Latox 2011-05-12 11:39:57

相關問題