2012-01-17 3 views
0

비슷한 주제가 있다는 것을 알고 있지만 여전히 효과적인 해결책을 얻지 못했습니다. $.post 메서드를 서버에 보내기 전에 URL을 수정하여 (사용자가 서로 URL을 공유 할 수 있도록) 페이지를 다시로드하지 않고 수정하려고합니다. 그것을하는 방법?페이지를 다시로드 할 때까지 URL 수정

편집 : 즉, 페이지에 표시된 데이터를 필터링하기 위해 $.post 메서드를 만들고 싶습니다. 또한 사용자가 복사 할 수있는 URL을 수정하려고합니다.

+0

, 당신이 사용할 수있는 HTML5의 ['History.pushState'] (http://badassjs.com/post/840846392/location-hash-is-dead-long-live-html5-pushstate) . –

+0

하지만 현재 URL이 아니라 기록을 수정합니다. – Armin

+0

@Armin : 현재 URL을 변경하지 않고 [History.replaceState'] (https://developer.mozilla.org/en/DOM/Manipulating_the_browser_history#The_replaceState() .C2A0method)가 있습니다. . –

답변

0

이것은 불가능합니다. 다시로드하지 않고 수정할 수있는 URL의 유일한 부분은 # (해시 a.k.a. 조각) 다음 부분입니다. 이전에 전체가 새 URL (또는 이전 URL)의로드를 시작합니다.

다음과 같은 자바 스크립트와 (재로드와 함께)를 변경할 수 있습니다

location.href = 'http://www.whatever.com'; 
+0

폼 요소에서'action' 속성을 수정할 수 없습니까? –

+0

당신이 원하는 것은 무엇일까요? – Armin

+0

아마 잘못 읽은 것 같지만 실제 게시하기 전에 POST 동작의 URL을 변경하려는 것 같습니다. –

2

을 사용자가 현대적인 브라우저 (IE 아니라 거의 아무것도)를 사용하는 경우, 당신은 새로운 HTML5 history methods를 사용할 수 있습니다. 구체적으로는 history.replaceState입니다.

replaceState() 페이지를 다시로드하지 않고 URL을 변경합니다.

$.post('/some/url/', {some: data}, function(d){ 
    // Do whatever with the returned data... 

    // Change page URL 
    history.replaceState({}, '', '/some/url/'); 
}); 

아니면 데이터를로드하기 전에 URL을 변경할 수 있습니다 : 당신은 다음과 같이 사용할 수 있습니다

// Change page URL 
history.replaceState({}, '', '/some/url/'); 
// load page data 
$.post('/some/url/', {some: data}, function(d){ 
    // Do whatever with the returned data... 
}); 

replaceState의 예를 들어, 여기 : https://github.com/features/projects을하고, 4 개 탭을 클릭합니다. URL 변경 사항을 살펴보세요. 그러나 기록에 추가 된 내용은 없습니다 :-)

+0

감사합니다. 나는 그것을 시도 할 것이다. 따라서 사용자가 IE를 사용하면 URL이 변경되지 않습니까? – Tony

+0

@ 토니 : 아니요. 'history.replaceState'는 IE에서 작동하지 않습니다. 'replaceState' 호출에'if (!! (window.history && window.history.replaceState))'를 추가해야합니다. –

0

아마도 이것이 원하는 것일까요? 최신 브라우저에서

<body> 
    ... 
    <div id='urltocopy'></div> 
    ... 
</body> 

function doPost() { 
    $('#urltocopy').html('<a href="http://newurltocopy">Please copy</a>'); 

    $.ajax({ 
      type: 'POST', 
      url: urlStr, 
      dataType: 'html', 
      success: function(data) { 

      }, 
      data: {}, 

     }); 
} 
관련 문제