2013-02-04 7 views
1

나는 한 가지 문제가 있으며 js에 익숙하지 않으므로 조언을 주시면 감사하겠습니다.jQuery를 사용하여 데이터를 임시 저장하는 방법

기본적으로 기사 페이지에 x 초마다 실행되는 ajax 호출이 있는데, 이는 데이터베이스에 연결하고 주석 번호를 확인합니다.

모든 통화가 끝난 후 마지막 전화가 이전 전화보다 더 큰 번호를 반환했는지 확인해야합니다 (번호가 증가했는지 확인).

단일 호출의 데이터를 올바르게 저장하는 방법을 알아내는 데 어려움이 있습니다. 다음 호출과 비교하여 삭제되고 물론 새 데이터로 덮어 쓰게됩니다.

이제는 쿠키를 사용하여 보이지 않는 요소 내부에 데이터를 저장하고 저장하는 두 가지 방법을 사용할 수 있습니다.하지만 그 최적의 해결책은 무엇입니까?

+0

지금까지 작성한 코드를 표시해야합니다.FYI, 그냥 AJAX 이상, 당신은 그냥 JS var에 데이터를 저장할 수 있습니다 ... – JAAulde

+1

감사 JAAulde, 나는 아래에 대답을 accepeted하지만 귀하의 의견은 고마워 정확 :) – OriginalEXE

답변

5

쿠키 또는 dom을 사용하여이 데이터를 저장하지 않아도됩니다. 그냥 폐쇄 *를 사용하십시오!

var old = null; 

$.get(url, function(d){ 
    if(old == null){ 
    old = d; 
    } 
    if(old.something > d.something){ 
     //do something else 
    } 
}); 

클로저는이 자바 스크립트를하지 않은 경우 당신이 $.get 함수에서 외부 old VAR을 수정할 수 없습니다 것, 작동 이유입니다.

+0

Thnaks, 왠지 두려워 변수는 모든 Ajax 호출 실행시 자체를 정리합니다. 그것은 실제로 매우 간단했습니다. :) – OriginalEXE

0

언급 한 두 가지 방법이 정확합니다. 일반적으로 보이지 않는 요소 안에 DOM에 데이터를 저장합니다.

세 당신이 보길 원하는 수 많은 : 현대 브라우저는 이제 브라우저의 저장 장치에 저장된 제외하고, 기능적 쿠키의 것과 동일 HTML5 로컬 스토리지를 가지고)

1. 이것은 IE9에는 존재하지 않으며 최신 브라우저에서도 여전히 개발 중이므로 사용자 브라우저에이 기능이 있다는 것을 알지 못하면 사용하지 마십시오 (IE9는 아직 지원하지 않습니다). http://www.w3schools.com/html/html5_webstorage.asp

2) jQuery를 사용하는 경우 jQuery 데이터가 있습니다 : http://api.jquery.com/jQuery.data/, 특정 요소에 데이터를 첨부 할 수 있습니다. 그 링크는 내가 할 수있는 것보다 더 잘 설명한다.

3) 자바 스크립트가 설정된 방식에 따라 자바 스크립트의 변수에 이전 댓글의 개수를 저장할 수 있습니까? 그런 다음 AJAX 호출이 반환되면 결과 변수와 이전 개수의 변수를 비교할 수 있습니다. 가능하다면이 해결책을 택할 것입니다.

2

렌더링 기능/점점 의견의 범위의 외부에있는 변수를 사용하여 페이지에서

var CommentsModule = (function(){ 
    var me = {}, 
     numComments = null; 

    function renderComments(comments){ 
     //render logic here 
     for(i=numComments || 0; i<comments.length;i++){ //the || 0 handles the initial load when the numComments === null 
      //append new comments 
     } 
     //reset your 'cached' variable to the current # of comments 
     numComments = comments.length; 
    } 

    me.getComments = function() { 
     //do $.get or $.ajax 
     $.ajax("myURL", 
      success: function(msg) { 
       if(msg.length > numComments) { 
        renderComments(msg); 
       } 
      } 
     }); 
    } 

    return me; 
}()); 

:

setInterval(CommentsModule.getComments, 5000); 
//....or something 
+0

감사합니다. 이전에 게시 된 답변보다 위의 accepetd가 정확하지만이 솔루션과 함께갔습니다. – OriginalEXE

1

로컬 스토리지 :

localStorage.setItem('lastUpdate','2013-02-04'); 

var lastUpdate = localStorage.getItem('lastUpdate'); 

또는 사용을 귀하의 의견의 데이터 속성, 예 :

$('#comments').data('lastUpdate', '2013-02-04'); 
0

이 코드를 사용할 수 있습니다. 쿠키 플러그인에 JQuery가 필요합니다. 임시 저장을위한 것이 아닙니다.

function GetData(key) 
    { 
     var sonuc = ""; 
     if (typeof (localStorage)!="undefined") 
     { 
      //İkinci html5 localStorage desteği varmı ona bakılır 
      if (localStorage[key] != null) 
      { 
       sonuc= localStorage[key]; 
      } 
     } 
     else 
     { 
      //son olarak cookie desteği varmı ona bakılır 
      sonuc=$.cookie(key); 
     } 
     return sonuc; 
    } 

    function SetData(key,value) 
    { 
     if (typeof (localStorage) != "undefined") 
     { 
      //ikinci önce html5 localStorage desteği varmı ona bakılır 
      try 
      { 
       localStorage.setItem(key, value); 
       return true; 
      } catch (e) 
      { 
       return false; 
      } 

     } 
     else 
     { 
      //son olarak cookie desteği varmı ona bakılır 
      try 
      { 
       $.cookie(key, value); 
       return true; 
      } catch (e) 
      { 
       return false; 
      } 
     } 
    } 

    /*this plugin is to add cookie function to jquery*/ 
    /*Copyright (c) 2006 Klaus Hartl (stilbuero.de)*/ 
    jQuery.cookie = function (name, value, options) { 
     if (typeof value != 'undefined') { // name and value given, set cookie 
      options = options || {}; 
      if (value === null) { 
       value = ''; 
       options.expires = -1; 
      } 
      var expires = ''; 
      if (options.expires && (typeof options.expires == 'number' || options.expires.toUTCString)) { 
       var date; 
       if (typeof options.expires == 'number') { 
        date = new Date(); 
        date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000)); 
       } else { 
        date = options.expires; 
       } 
       expires = '; expires=' + date.toUTCString(); // use expires attribute, max-age is not supported by IE 
      } 
      var path = options.path ? '; path=' + (options.path) : ''; 
      var domain = options.domain ? '; domain=' + (options.domain) : ''; 
      var secure = options.secure ? '; secure' : ''; 
      document.cookie = [name, '=', encodeURIComponent(value), expires, path, domain, secure].join(''); 
     } else { // only name given, get cookie 
      var cookieValue = null; 
      if (document.cookie && document.cookie != '') { 
       var cookies = document.cookie.split(';'); 
       for (var i = 0; i < cookies.length; i++) { 
        var cookie = jQuery.trim(cookies[i]); 
        // Does this cookie string begin with the name we want? 
        if (cookie.substring(0, name.length + 1) == (name + '=')) { 
         cookieValue = decodeURIComponent(cookie.substring(name.length + 1)); 
         break; 
        } 
       } 
      } 
      return cookieValue; 
     } 
    }; 
    /*end of jquery plugin*/ 
관련 문제