Mausoleum
Mausoleum

Reputation: 441

Adding a random number after the URL

I've got a site which uses jQuery and Ajax to change the site content without reloading the page. The site contains content which I often change. But somehow the page gets saved in the cache so it doesnt show the changes.

I tried several things to make the browser not to save the site into the cache like METAs and PHP. But it doesnt work.

I think it has to do with the fact, that the page always has the same URL so I thought about adding a random number to it like:

window.location.hash = $(this).attr('href').substr(0,$(this).attr('href').length-5);

(It's not my code, found it with some googlin) But this only adds the link ID I clicked on to the URL. I don't know where to put "Math.random()" to add a random number.

Hope you can help!

Upvotes: 2

Views: 16343

Answers (5)

Sahil Muthoo
Sahil Muthoo

Reputation: 12496

Just use cache : false. jQuery will automatically add a timestamp to the end of the URL for you, making sure that ajax requests are never cached.

Quoting the the API reference for .ajax()

cache Default: true, false for dataType 'script' and 'jsonp'

If set to false, it will force requested pages not to be cached by the browser. Setting cache to false also appends a query string parameter, "_=[TIMESTAMP]", to the URL.

Examples

  1. Globally disable caching for all future ajax requests. See .ajaxSetup()

    $.ajaxSetup({
      cache: false
    });
    
  2. Disable caching per request. See .ajax()

    $.ajax({
      url: "test.html",
      cache: false,
      success: function(html){
        $("#results").append(html);
      }
    });
    

Upvotes: 7

Ghazanfar Mir
Ghazanfar Mir

Reputation: 3541

Best option is to use timestamp with the request:

window.location.hash = $(this).attr('href')
                            .substr(0,$(this).attr('href').length-5)
                            + timestamp;

Upvotes: 0

Alex Turpin
Alex Turpin

Reputation: 47776

Like most mentionned, you should use the jQuery cache parameter, but for your information, it is often done not using Math.random but with new Date().valueOf(), which is a time value pretty much guaranteed to be unique.

Upvotes: 2

Matt Bradley
Matt Bradley

Reputation: 4505

If you are using jQuery's AJAX functions, try setting $.ajaxSetup( { cache: false } ) at the top of your page, and let jQuery take care of it for you.

Upvotes: 3

Naftali
Naftali

Reputation: 146310

window.location.hash = $(this).attr('href')
                            .substr(0,$(this).attr('href').length-5)
                            + Math.random();

Upvotes: 0

Related Questions