2013-08-14 5 views
2

내 웹 사이트는 hashchange에 의해 트리거되는 AJAX를 사용합니다 (책갈피에 더 친숙하게 만들기 위해). 내가 겪고있는 문제는 양식에서 "제출"을 클릭하면 $.post()을 통해 전송 된 serialize() 인 모든 양식 데이터가 손실됩니다. 제출을 클릭하면 "Flag 1"알림이 표시되고 다른 여러 가지 테스트 (경고, 반향 등)를 통해 알 수 있기 때문에이 사실을 알 수 있습니다. 또한 URL을 변경하는 동안 내가 뭘하려고 오전해시 변경을 강제하는 가장 좋은 방법은 무엇입니까?

$(document).ready(function() { 

var data = ''; 
var hash = ''; 
newPage(); 
alert('Flag 1'); 

$(window).bind('hashchange', function() { 
    hash = window.location.hash; 
    if (hash == '') { 
     path = window.location.pathname; 
     hash = '#' + path.replace(/^\/+/, ''); 
    } 
    data += '&func=' + hash; 
    var xhr = $.post(hash, data, function(result) { 
     $("maincontent").html(result); 
    }) 
    .done(newPage); 
}); 
// Initialize vars and handle new form elements 
function newPage() { 
    data = ''; 
    $('form').submit(function() { 
     data = $(this).serialize(); 
     // Flag 2 - What do I do here? 
    }); 
} 
// Load ajax content on first run of document 
if ($('#maincontent').html() == '') 
    $(window).trigger('hashchange'); 

}); 

수동으로 화재 hashchange 이벤트입니다 :

여기에 내 현재 코드입니다. 문제는 단지 window.location.hash = $(this).attr('action');return false;으로 설정하고 "플래그 2"주석이있는 경우 URL (... % 23 등)로 인코딩 된 hashmark로 인해 URL에 원치 않는 휴지통이 생길 수 있습니다. .

해시를 설정하는 가장 좋은 방법은 무엇이며 처음부터 내가하려고하는 일을하는 더 간단한 방법이 있는지 궁금합니다.

답변

0

글쎄, 내가 이렇게 많은 오류가 이해 (나는 또한 달성하기 위해 노력하고 탐색의 스타일에 대한 대체 방법을 제안 의견에 열려있어). 그러나 우리는 당신은 분명히 같은 것이 대체 옵션이 있습니다

  1. jQuery를 역사 플러그인 : http://plugins.jquery.com/history/ (데모 : http://4nf.org/)
  2. 역사 JS : https://github.com/browserstate/history.js/
  3. 하지만 피하기 위해 기꺼이하는 경우에 나는 HTML5 history.pushState를 추천 할 것입니다 이전 브라우저 지원. (데모 : https://developer.mozilla.org/en-US/docs/Web/Guide/API/DOM/Manipulating_the_browser_history)

행운을 빌어 요 !!

관련 문제