2012-05-22 30 views
20

Tôi có một URL có chuỗi truy vấn dài được đính kèm với nó. Sau khi tải trang, tôi không yêu cầu chuỗi truy vấn. Vì vậy, tôi muốn xóa chuỗi truy vấn khỏi thanh địa chỉ mà không cần tải lại trang.Làm cách nào để xóa chuỗi truy vấn khỏi url sau khi tải trang?

tôi đã cố gắng parent.location.hash = '';window.location.href = '/#'

Họ không tạo sự khác biệt.

+0

băm là một trong đó đưa ra sau khi '# '. chuỗi truy vấn là chuỗi sau '?' nhưng trước '#'. những gì bạn đang làm không có ý nghĩa. tại sao bạn muốn giấu nó? – Joseph

+0

đọc http://stackoverflow.com/questions/136458/change-the-url-in-the-browser-without-loading-the-new-page-using-javascript – shareef

+0

hãy kiểm tra mã của tôi nếu nó hoạt động ngay bây giờ hay không :) –

Trả lời

6

Bạn không thể làm điều đó mà không cần tải lại trang, hãy tưởng tượng xem bạn có thể đặt bất cứ thứ gì bạn muốn vào thanh địa chỉ trình duyệt không? An vui vẻ :)

Mặc dù bây giờ bạn có thể làm điều đó trong HTML5 (mà sẽ chỉ làm việc trên các trình duyệt hỗ trợ nó) bằng cách sử dụng mới history API, nhưng thực tế, kịch bản của bạn bảo đảm tốt nhất một viết lại thay vì trong đó có (dường như búa tạ để crack một hạt).

Như bạn đã nói bạn không cần chuỗi truy vấn sau khi tải trang, bạn nên thực sự đăng lại, sau đó chuyển hướng đến một URL khác sau khi bạn đã xử lý xong.

+7

Điều đó không đúng. [History API] (http://stackoverflow.com/a/10700997/19068) làm cho nó có thể. Nó có một số giới hạn, chính là bạn không thể thay đổi URL thành URL xuất hiện trên một nguồn gốc khác, nhưng câu hỏi không yêu cầu nó chuyển nguồn gốc. – Quentin

+2

@Quentin Bạn nói đúng, tôi không thể xóa nó (nó được chấp nhận) vì vậy tôi đã chỉnh sửa để kết hợp điều đó. Tôi cũng đã +1 của bạn :) – mattytommo

16

Điều đó có thể đạt được trong modern browsers sử dụng the history api, nhưng có lẽ không phải là giải pháp tốt nhất cho vấn đề của bạn.

history.replaceState({}, 'some title', '/'); 

Có vẻ như bạn nên xử lý dữ liệu tốt hơn và sau đó chuyển hướng đến trang chủ thay vì trả lại trực tiếp tài liệu HTML.

Vì bạn không muốn giữ URL xung quanh, nó sẽ không hữu ích cho việc đánh dấu trang, do đó, rất có khả năng bạn nên thực hiện yêu cầu POST tốt hơn.

Điều này cho thấy bạn nên sử dụng POST-Redirect-GET pattern.

+0

Tôi không thể sử dụng POST vì đó là dữ liệu phân tích đang được chuyển trong chuỗi truy vấn – Sangam254

+0

Tôi không thấy cách sau. Ngay cả khi có, bạn vẫn có thể chuyển hướng. – Quentin

+0

Bạn là một phao cứu sinh! Cảm ơn ... hoạt động như một sự quyến rũ! – user1656204

2

Sử dụng history.replaceState({}, "Title", "page.html");

cùng cú pháp cho pushState. Tuy nhiên bạn sẽ phải tìm cách để làm cho IE hiểu điều đó.

Cách tốt hơn là sử dụng mô-đun Apache mod_rewrite. Nó khá dễ sử dụng.

+0

Nhưng mod_rewrite sẽ chuyển hướng đến url được cắt trước khi tải trang – Sangam254

0

Bạn có thể tránh toàn bộ chuỗi truy vấn bằng cách sử dụng POST thay vì GET.

+0

Tôi không thể sử dụng POST vì đó là dữ liệu phân tích đang được chuyển trong chuỗi truy vấn – Sangam254

0

Cập nhật Mã Bây giờ nó sẽ làm việc

Just Thêm Dưới mã trong bạn trang có liên kết mà bạn muốn thay đổi.

// javascript function 

    function buildLin(first) { 
    var firs = first.toString() 
     //alert(firs); 
     //document.getElementById("team").value = "1"; 
      document.location.hash = "#" + firs.replace(/ /g, "_"); 
     //alert(document.location.hash); 
    } 

//jQuery to call above function after page loads 

    $(document).ready(function() { 
     buildLin(2); 
    }); 

Đừng quên để thêm http://code.jquery.com/jquery-latest.js trên trang của bạn

+0

Cảm ơn bạn đã nhập mã. Nhưng nó thêm một số 2 ở cuối url (sau chuỗi truy vấn). Tôi muốn xóa chuỗi truy vấn khỏi url sau khi tải trang. – Sangam254

0

tôi đã phải đối mặt với cùng một vấn đề.Giải pháp của tôi là những: Lấy yêu cầu như thế này:

operation.aspx?opr=lock 

Sau khi kết thúc các hoạt động chuyển hướng như thế này:

Response.Redirect("operation.aspx"); 

Trong phản ứng, nếu có bất kỳ tin nhắn, tôi in chúng như thế này:

if (Session["InfoMessages"] != null) 
{ 
    lblMessage.Text = (string)Session["InfoMessages"]; 
    Session["InfoMessages"] = null; 
} 

tôi hy vọng nó sẽ giúp những người khác :)

27

Như những người khác đã nói, bạn có thể thực hiện việc này bằng cách sử dụng History API trong các trình duyệt hiện đại (IE10 +, FF4 +, Chrome5 +). không có ví dụ đầy đủ trong các câu trả lời, vì vậy figured tôi muốn chia sẻ giải pháp của tôi, như tôi chỉ có một yêu cầu để làm điều tương tự:

history.pushState(null, "", location.href.split("?")[0]); 

Nếu bạn đang sử dụng Modernizr, bạn cũng có thể kiểm tra xem Lịch sử API có sẵn như vậy:

if (Modernizr.history) { 
    history.pushState(null, "", location.href.split("?")[0]); 
} 
1

tôi sử dụng snippit mã này trong các dự án cá nhân của tôi, nơi tôi cần phải loại bỏ params URL mà không cần tải:

var newURL = location.href.split("?")[0]; 
window.history.pushState('object', document.title, newURL); 
Các vấn đề liên quan