json kodlanmış rasgele oluşturulmuş bir sayı IE8 hep aynı

3 Cevap php

i rastgele bir json kodlanmış bir renk döndüren bir php fonksiyonu var

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

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

?>

sayfa i bir olay olduğunda, bir renk için sorar ve buna göre pencere arka planını değiştiren bir jquery işlevi vardır

$('.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 ve krom iyi çalışır, ancak ie8 ben her zaman aynı renk alırsınız. Herhangi bir fikri neden?

3 Cevap

Sayfanız muhtemelen diğer tarayıcılara göre daha agresif bir önbelleğe alma politikası vardır IE, önbelleğe oluyor. Yerine isteme color.php, bu deneyin:

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

Bu jQuery önbelleğe önlemek için kullandığı bir yöntemdir. Sadece bu tamamen yeni bir istek düşünce içine sahte tarayıcıya URL için benzersiz bir parametre ekliyoruz.

IE muhtemelen sayfanın önbelleğe alınmış bir sürümü oluyor. Taze bir belge talep favori yöntem seçmek ve onunla gitmek :)

@inerte Dediğim gibi, bu sonucu önbelleğe muhtemelen IE bulunuyor.

Bunu yanlış olduğundan, $.ajax kullanmak ve false önbellek seçeneği ayarlamak isteyebilirsiniz sadece dataType için script ve 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
})

. Yoksa $ getJSON kullanmadan önce $.ajaxSetup kullanarak bu seçeneği ayarlayabilirsiniz:

$.ajaxSetup({ cache: false });