2009-08-27 74 views
0

相同我有一個PHP函數的頁面我有一個jquery功能,每當發生事件時就返回一個隨機JSON編碼顏色JSON編碼隨機生成的數字始終是IE8

<?php 
    function randNum() { 
     return rand(0, 255); 
    } 

    $color = array ('r'=>randNum(),'g'=>randNum(),'b'=>randNum()); 
    echo json_encode($color); 

?> 

,要求提供一個顏色和改變窗口的背景相應

$('.wnd').mouseenter(function() { 
    $.getJSON("color.php", function(color){ 
     var rgbString = 'rgb(' + color.r + ', ' + color.g + ', '+ color.b + ')'; 
     var hexString = rgb2hex(rgbString); 
     $('.wnd').css('background-color', hexString); 
    }); 
}); 

WHIS工作在FF3和鉻不錯,但在IE8中,我總是得到相同的顏色。任何想法爲什麼?

回答

0

您的網頁可能獲得緩存在IE瀏覽器,它具有比其他瀏覽器更積極的緩存策略。而不是請求color.php的,試試這個:

$.getJSON("color.php?_" + new Date().getTime().toString(), function(color)... 

這是jQuery使用以防止緩存的方法。您只需在網址中添加一個唯一參數即可讓瀏覽器認爲這是一個全新的請求。

3

IE可能獲取頁面的緩存版本。選擇你最喜歡的方法,請求一個新的文件,並與它一起:)

1

由於@inerte表示,它可能是IE緩存結果。

您可能需要使用$.ajax和緩存選項設置爲false,因爲它只針對的dataType scriptjsonp是假的:

$.ajax({ 
    type: "GET", 
    url: "color.php", 
    success: function (color) { 
    var rgbString = 'rgb(' + color.r + ', ' + color.g + ', '+ color.b + ')', 
     hexString = rgb2hex(rgbString); 

    $('.wnd').css('background-color', hexString); 
    }, 
    dataType: 'json', 
    cache: false 
}) 

或者你可以設置使用$ .getJSON之前使用$.ajaxSetup該選項:

$.ajaxSetup({ cache: false });