我發現了一個奇怪的問題。附加的jQuery腳本無法在Safari(Mac)上工作
我正在與我的webapp第一步彗星。長話短說,我有一個很好的小腳本,用於調查由php控制器發送的另一個腳本。
後來,我會在兩種方式上工作。無論是作爲longpolling還是就像它現在的作品 - 在JavaScript間隔。
它如何在Chrome上運行: 在「ready」事件上,第一個腳本設置了一個函數間隔,它向控制器發送一個ajax請求(我們將其命名爲'ping.php')。如果ajax成功,msg應該替換div#wrapperForJs的html內容。
Ping.php檢查數據庫是否有更新,以及它是否符合腳本回顯的腳本結果。上述
文本是爲人道主義者,現在TL;博士:
jQuery代碼:
function pingThatApp(){
$.ajax({
type: 'GET',
url: '/ping',
success: function(msg){
$('#pingWrapper').html(msg);
}
});
}
$(document).ready(function(){
window['pingLoop'] = setInterval(
function(){
pingThatApp();
},4000
);
});
PHP回聲:
$timeScrpt = '<script>';
foreach ($timers['p'] as $k => $v) {
$timeScrpt .= "$('#project-{$k} .pTime').fadeOut().attr('title', 'Time spent already: {$v}').html('{$v_short}').fadeIn();";
}
foreach ($timers['t'] as $k => $v){
$timeScrpt .= "$('#timeSpent-task-{$k} b').fadeOut().html('{$v}').fadeIn();";
}
$timeScrpt .= '</script>';
一切都在Chrome的偉大工程。不過,Safari在該腳本中存在一些問題。這個問題看起來像Safari無法找到jQuery對象。
我做了一些console.log測試,檢查了代碼 - 輸出看起來不錯。
如果我改變$ k var和硬編碼它有一些int或覆蓋迭代開始時的$ k var,它也適用於Safari(jQuery找到該元素)。
我也使與發現元素的長度的的console.log測試:
el = $('#project-$k .pTime'); console.log(el.length);
鉻輸出類似的信息(0,0,0,1,1,1,0)[0沒有找到,1 - found0 Safari始終輸出0。
我在這裏寫作是因爲不知道這個寶貴的瀏覽器正在發生什麼。也許這裏有人有任何解決方案。
請注意,不要試圖說服我間隔對數據更新目的不利。我知道,現在最好的是我能實現的最好的。
「請,不要試圖說服我,間隔不適合數據更新的目的。」 * facepalm *你的輪詢將永遠不會使用'setInterval()'正確工作。這不是一個建議,它只是實現它的正確方法。 – 2013-03-18 19:38:36
就像我之前說的。我不會討論這個問題。它適用於Chrome,Firefox,Opera Mobile。它在Safari上不正確。 – sznowicki 2013-03-18 19:42:19