Bug Tracker

Modify

Ticket #8394 (closed bug: invalid)

Opened 3 years ago

Last modified 9 months ago

How to fix browser cache and notmodified respond for JSON? jQuery.ajax({ifModified:true,cache:true}) JSON request break on data respond.

Reported by: Binyamin <7raivis@…> Owned by:
Priority: low Milestone: 1.next
Component: ajax Version: 1.5.1
Keywords: Cc:
Blocking: Blocked by:

Description

How to fix browser cache and notmodified respond for JSON? jQuery.ajax({ifModified:true,cache:true}) JSON request break on data respond.

First time browser request  http://localhost/api returns status 200 OK and nexts 304 Not Modified

    $.ajax({
        type:"GET",
        url:'http://localhost/api',
        dataType:'json',
        cache:true,
        ifModified:true,
        success:function(data,textStatus,jqXHR){
            console.debug(jqXHR.status+':'+textStatus);
            console.debug(data); // On repeated request returns `undefined`
        }
    });

XHR first time returns ok:

    200:success
    Object {content="Hello!"}

but on next times returns data undefined:

    304:notmodified
    undefined

How to solve it? It seems jQuery 1.5.1 bug. Expected result:

    304:notmodified
    Object {content="Hello!"}

Change History

comment:1 Changed 3 years ago by jaubourg

  • Status changed from new to closed
  • Resolution set to invalid

That's exactly how the ifModified option is supposed to work. Setting ifModified to true will have ajax set headers to issue a conditional request.

 http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html, section 10.3.5, about 304 Not Modified:

If the client has performed a conditional request and access is allowed,
but the document has not been modified, the server SHOULD respond with this
status code. The 304 response MUST NOT contain a message-body, and thus is
always terminated by the first empty line after the header fields.

If you want to receive 200 OK responses all the time, then do NOT use the ifModified option: the browser's xhr implementation will deal with 304 Not Modified responses under the hood while only presenting 200 OK responses to user code.

comment:2 Changed 3 years ago by Binyamin <7raivis@…>

@jaubourg - Then how to get:

304:notmodified
    Object {content="Hello!"}

when  http://localhost/api returns 304 Not Modified?

comment:3 Changed 3 years ago by dmethvin

@Binyamin: Cache it in your own code. If you need more help, ask on forum.jquery.com since this is not a bug.

comment:4 Changed 3 years ago by jitter

  • Priority changed from undecided to low
  • Component changed from unfiled to ajax

comment:5 Changed 9 months ago by artemciy@…

There is a bug in jQuery. Consider the following request:

var x = new XMLHttpRequest(); x.open ('GET', ' http://j2.bc24.ru/', false); x.send (null); console.log (x.responseText);

When it rans for the second time, it will return the cached content from the browser, as it should per the specification: "For 304 Not Modified responses that are a result of a user agent generated conditional request the user agent must act as if the server gave a 200 OK response with the appropriate content." A similar jQuery request:

jQuery.ajax (' http://j2.bc24.ru/', {async: false, success (data) {console.log (data)}})

will return an empty data. The browser has cached the response, but jQuery failed to provide it, rendering jQuery.ajax useless around any kind of HTTP caching.

comment:6 Changed 9 months ago by artemciy@…

Please disregard what I've said earlier. jQuery works fine, it was my error.

Please follow the  bug reporting guidlines and use  jsFiddle when providing test cases and demonstrations instead of pasting the code in the ticket.

View

Add a comment

Modify Ticket

Action
as closed
Author


E-mail address and user name can be saved in the Preferences.

 
Note: See TracTickets for help on using tickets.