2012-06-27 48 views
5

Nếu tôi thay đổi giá trị băm như sau: window.location.hash = "main/0/sub/1/na/false";. Địa chỉ trong trình duyệt thay đổi thành http://mysite.com/#main/0/sub/1/na/false. Chức năng onhashchange của Trang cháy và mọi thứ hoạt động như mong muốn.Sử dụng dấu gạch chéo trong window.location.hash

Tuy nhiên, trong Firebug tôi có thể thấy rằng tôi cũng đang gửi yêu cầu tới: http://mysite.com/main/0/sub/1/na/false ... URL không có hàm băm, dẫn đến 404 im lặng trong bảng điều khiển.

Khi tôi gỡ lỗi, tôi thấy rằng điều đó xảy ra tại điểm window.location.hash.

Nhưng, nếu tôi thay đổi mã băm như vậy: window.location.hash = "main=0&sub=1&na=false"; không yêu cầu bổ sung nào được gửi.

Tại sao yêu cầu bổ sung được gửi trong ví dụ đầu tiên?

UPDATE: tôi nhận thấy nó sẽ gửi các yêu cầu sau window.location.hash và trước (trong?) $(window).bind('hashchange'). Ví dụ nếu tôi có ...

window.location.hash = 'main/0/sub/1/na/false'; // Breakpoint 1 in Firebug 

$(window).bind('hashchange', function(e) { 
    e.preventDefault(); // Breakpoint 2 in Firebug 
    e.stopPropagation(); 
}); 

Khi dừng tại điểm ngắt 1, không yêu cầu nào được gửi. Khi nó dừng lại ở điểm ngắt 2, yêu cầu đã được gửi đi.

Tôi có thể thấy trong Apache Tomcat rằng yêu cầu đang được gửi đi.

Tôi sẽ thêm rằng tôi đã jQuery và jQuery Mobile cắm vào

UPDATE 2:. Loại bỏ jQuery Mobile giải quyết vấn đề. Tuy nhiên, tôi cần nó:/

CẬP NHẬT 3

Nếu có ai quan tâm: Với jQuery Mobile: http://jsfiddle.net/pioSko/hz5PU/3/

Without jQuery Mobile: http://jsfiddle.net/pioSko/hz5PU/4/

mở Firebug hoặc ứng dụng gỡ lỗi khác và kiểm tra các liên kết.

+0

Yêu cầu có thực sự nhấn máy chủ của bạn không? Phiên bản Firebug, Firefox nào? Tôi không nhìn thấy nó trên một cái cũ thực sự ở đây, cũng không phải trên một Chrome tươi, vì vậy tôi đoán đây có thể là một lỗi ở đâu đó. –

+0

Không thể sao chép với FF 12.0 và 13.0.1. Đã thử 'window.location.hash =" main/0/sub/1/na/false ";' trong giao diện điều khiển Firebug trên một trang ngẫu nhiên, không có yêu cầu mạng nào được quan sát. – lanzz

+0

Tôi đã tạo một trang giả và trong đó tôi không thể tạo lại lỗi này. Vì vậy, nó phải được sâu hơn trong mã. – pioSko

Trả lời

-4

Tôi sẽ đặt cược đoán ở đây. Tôi khá chắc chắn rằng bằng cách sử dụng dấu gạch chéo sau khi một băm là một URL không hợp lệ và firefox có lẽ đang cố gắng bù đắp cho điều đó bằng cách loại bỏ băm để thực hiện là một URL hợp lệ.

+3

Dấu gạch chéo sau khi băm hoàn toàn hợp lệ và bình thường. –

3

Tôi gặp sự cố tương tự khi sử dụng History.js. Tôi nghĩ đó là hành vi dự định cho tập lệnh đó, vì nó được thiết kế để làm cho URL trở nên đẹp hơn (không phải là hashy) trong khi cũng không tải lại trang.

+1

có vẻ như tôi đã gặp phải vấn đề tương tự. Vấn đề này vẫn mở trong dự án History.js, xem https://github.com/browserstate/history.js/issues/301. Bạn đã giải quyết nó như thế nào? Thông qua một số thay thế History.js? – xmojmr

+0

Thành thật phải vật lộn để nhớ những gì tôi đã làm trong tháng 12 năm 2012, xin lỗi. (Đã sử dụng Angular ui.router cho chức năng tương tự trong một số dự án gần đây và nó hoạt động tốt! Mặc dù đó rõ ràng là giải pháp cụ thể theo góc.) – iameli

+0

Tôi đã giải quyết vấn đề bằng cách không sử dụng History.js hoặc bất kỳ điều gì tương tự. Tôi đang sử dụng '' 'window.location.hash''' đọc/ghi và' '' window.onhashchange'''. Nó là đủ cho nhu cầu của tôi. Vấn đề viết lại dấu gạch chéo là do History.js (trong đó có 168 vấn đề mở) khi câu trả lời của bạn cho biết. Tôi cũng đã xem xét [devote/HTML5-history-API] (https://github.com/devote/HTML5-History-API) là giải pháp thay thế có thể sử dụng (chỉ còn 13 sự cố mở và còn sống) – xmojmr

Các vấn đề liên quan