json codificado número aleatório gerado é sempre a mesma em ie8

votos
0

Eu tenho uma função php que retorna uma cor json codificado aleatório

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

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

?>

na página Eu tenho uma função jQuery que sempre que ocorre um evento, pede uma cor e muda o fundo da janela de acordo

$('.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 funciona bem no FF3 e cromo, mas no IE8 i sempre recebem a mesma cor. alguma idéia de por quê?

Publicado 27/08/2009 em 04:39
fonte usuário
Em outras línguas...                            


3 respostas

votos
3

IE está começando provavelmente uma versão em cache da página. Escolha seu método favorito de solicitar um documento fresco e ir com ele :)

Respondeu 27/08/2009 em 04:43
fonte usuário

votos
1

Como @inerte disse, é provavelmente IE que armazena o resultado.

Você pode querer usar $ .ajax e defina a opção de cache para falso, já que ela é falsa apenas para dataType scripte jsonp:

$.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
})

Ou você pode definir essa opção usando $ .ajaxSetup antes de usar $ .getJSON:

$.ajaxSetup({ cache: false });
Respondeu 27/08/2009 em 04:53
fonte usuário

votos
0

Sua página está provavelmente ficando em cache no IE, que tem uma política de cache mais agressivo do que outros navegadores. Em vez de solicitar color.php, tente o seguinte:

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

Este é o método que jQuery usa para evitar o cache. Você está apenas adicionando um parâmetro único para o URL de falsificar o navegador em pensar que é um totalmente novo pedido.

Respondeu 27/08/2009 em 04:52
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more