Skip to main content

Iphone runs ONLY from cache even when online



I am having a bit of trouble. I am making a mobile version of our website, and want to cache some of the more important pages, not just for use offline, but for added speed in some cases.





First question: Do I have to manually cache the pages to speed up performance? I am using AJAX calls to bring in content, and it obviously doesn't work offline without manually caching, but while online is Safari going to request a page via ajax if it's already in the cache?





I currently have it working correctly. My pages cache and work both online and offline. But if I don't specify all pages I want cached, it appears with every ajax call, those pages are requested again, not loaded from cache.





Second Question (My actual problem): When online or offline, and using a .manifest file to manually cache files, it appears that the iPhone sets itself in a "offline" mode, even when online. So when I run my ajax call, if the page is not cached, I get an error.







$.ajax({

url: page,

data: 'ajax=true',

context: $(newContent),

success: function(data, status){

if (status == 'error') {

alert("You must be online to view this page.");

} else {

//EXECUTED CODE HERE

}

}, complete: function(data, status){

setTimeout(function(){

if (status != 'error') {

//EXECUTED CODE HERE ON COMPLETE

}

}, 700);

}

});







So, it's just a simple ajax call and everything works perfect if I am not using a manifest file to manually create a cache. But if I do use it, then I always get an error on the ajax call when requested uncached pages even when ONLINE. It's like the iPhone switches Safari to offline mode if there is a cache to be used.





Is there some sort of workaround or fix for this. I've been combing the internet for hours trying to find an answer.





I even added a click event to check the state of window.navigator.onLine and it always returns true, as it should, when online. By why does the ajax call fail? It's like the iPhone will not send requests if a cache exists.





I think I might be onto something. I am caching the pages:





  • degrees.cfm



  • degrees.cfm?ajax=true



  • degrees.cfm?degreeType=Bachelors







But I am not caching the pages like:





  • degrees.cfm?degree=1



  • degrees.cfm?degree=2



  • etc.







At first I only cached degrees.cfm, but obviously I need to cache the pages with the GET variables or render them useless. It appears that if a single page is cached without a variable, then safari might still look to that page, or at least think it is cached if different variables are on it. So when I send a request to degrees.cfm?degree=1, Safair thinks the page is in the cache because degree.cfm is there without any variables. So it doesn't even try to get the page from the server, even when online.


Comments

Popular posts from this blog

Why is this Javascript much *slower* than its jQuery equivalent?

I have a HTML list of about 500 items and a "filter" box above it. I started by using jQuery to filter the list when I typed a letter (timing code added later): $('#filter').keyup( function() { var jqStart = (new Date).getTime(); var search = $(this).val().toLowerCase(); var $list = $('ul.ablist > li'); $list.each( function() { if ( $(this).text().toLowerCase().indexOf(search) === -1 ) $(this).hide(); else $(this).show(); } ); console.log('Time: ' + ((new Date).getTime() - jqStart)); } ); However, there was a couple of seconds delay after typing each letter (particularly the first letter). So I thought it may be slightly quicker if I used plain Javascript (I read recently that jQuery's each function is particularly slow). Here's my JS equivalent: document.getElementById('filter').addEventListener( 'keyup', function () { var jsStart = (new Date).getTime()...

Is it possible to have IF statement in an Echo statement in PHP

Thanks in advance. I did look at the other questions/answers that were similar and didn't find exactly what I was looking for. I'm trying to do this, am I on the right path? echo " <div id='tabs-".$match."'> <textarea id='".$match."' name='".$match."'>". if ($COLUMN_NAME === $match) { echo $FIELD_WITH_COLUMN_NAME; } else { } ."</textarea> <script type='text/javascript'> CKEDITOR.replace( '".$match."' ); </script> </div>"; I am getting the following error message in the browser: Parse error: syntax error, unexpected T_IF Please let me know if this is the right way to go about nesting an IF statement inside an echo. Thank you.