2012-05-01 7 views
5

최소 수의 PHP/MySQL 명령어가 실행되도록 서버에서받은 데이터를 캐시하고 싶습니다. 캐시 옵션이 $ .ajax()에 자동으로 설정된다는 것을 알고 있습니다. 그러나 postdata가 이전 호출과 동일하더라도 $ .ajax()가 호출 될 때마다 MySQL 지침이 표시됩니다. 내가 놓친 게 있니? 서버에서받은 데이터를 캐시하는 가장 좋은 방법은 무엇입니까?Ajax 호출에서받은 데이터를 캐시하는 방법은 무엇입니까?

$.ajax({ 
... 
... 
cache : true 
}); 

답변

4

아이디어가 있습니다. 물론 사용자의 필요에 맞게 조정하십시오.

function getAjaxData(){ 
    var $node = $('#note_container'); 
    if ($node.data('ajax-cache').length == 0) { 
     $.ajax({ 
      // do stuff. 
      success: function(data){ 
       // Add dialog content 
       $node.html(data).data('ajax-cache',data).dialog(); 
      } 
     }); 
    } else { 
     $node.html($node.data('ajax-cache')).dialog(); 
    } 
} 
getAjaxData(); 
+0

downvote의 이유는 무엇입니까? 이 대답은 유용하지 않았습니까? – AlienWebguy

+0

브라우저는이를 허용하면 캐싱을 처리합니다. EXACT 동일한 요청을 두 번 시도하면 자체 캐시가 사용됩니다. 브라우저가 캐싱을 처리 할 때 바퀴를 다시 만드는 이유는 무엇입니까? – Adam

+0

잘 모르겠습니다. 나에게 좋은 개념 인 것 같습니다. 요소에 저장하면 jQuery로 요소를 제거하면 자동으로 정리됩니다. –

0

: 여기 내 코드입니다 id가 이미 발생 했으므로 캐시에서 제거하지 않으면 새로운 요청이 생성되지 않습니다.

+0

cache 매개 변수는 기본적으로 true입니다. 확실하게, 나는 당신이 제안한대로 그것을 설정했습니다. 나는 아직도 MySQL 명령어가 서버에 의해 처리되는 것을보고있다. – Stephen305

4
내가 캐시 자신을 처리 할 것

: 요청에 말했다 경우,

// declare this on global scope 
var ajaxCache = {}; 
... 

if (!ajaxCache[this.id]) { 
    ajaxCache[this.id] = $.ajax({ 
     type: "POST", 
     url: "get_note.php", 
     data: {'pid':'<?php echo $project_id;?>','record_id':this.id} 
    }); 
} 

ajaxCache[this.id].done(function(){ 
    if (data != '0') { 
     // Add dialog content 
     $('#note_container').html(data); 
     $('#note_container').dialog(); 
    } else { 
     alert('woops'); 
    } 
}); 

이 방법을 당신은 같은 캐시 매개 변수를 추가해야

var postdata = {'pid':'<?php echo $project_id;?>', 
       'record_id':this.id}; 

$.ajax({ 
    type: "POST", 
    url: "get_note.php", 
    data: postdata 
}).done(function(data){ 
    if (data != '0') { 
     // Add dialog content 
     $('#note_container').html(data); 
     $('#note_container').dialog(); 
    } else { 
     alert(woops); 
    } 
}); 
+0

니스. 이것은 또한 작동합니다. – Stephen305

+0

하지만 캐시 된 데이터를 반환 할 때 deferred.done() 메서드가 다시 호출됩니까? – sivann

+0

은 no라고하지만 더 많은 콜백을 연결할 수 있으며 콜백은 이미 해결 되었기 때문에 즉시 실행됩니다. –

관련 문제