2010-04-12 30 views
9

Tôi đang làm việc với Symfony 1.2. Tôi đã xem một danh sách các đối tượng. Tôi có thể đặt hàng, lọc chúng theo danh mục hoặc chuyển sang trang tiếp theo (có phân trang). Tất cả mọi thứ được thực hiện với AJAX, vì vậy tôi không phải tải lại tất cả các trang.Nhận #part trong URL bằng PHP/Symfony

Điều tôi muốn đạt được là có ví dụ http://urltopage#page=1&order=title&cats=1,2; do đó, trang mới được lưu trong lịch sử trình duyệt và anh ấy có thể dán trang đó vào một trang web khác.

Tôi chưa tìm được cách để nhận #part. Tôi biết đó là chỉ cho trình duyệt nhưng tôi không thể tin rằng tôi không thể có được thông qua PHP. Tôi chắc chắn có một giải pháp đơn giản mà tôi thiếu ...

cảm ơn rất nhiều!

+0

Nếu nhiều người đã nói với bạn rằng bạn không thể nhận được ngoại trừ thông qua trình duyệt, họ có thể đúng. Và bạn không thể. –

Trả lời

15

Bạn không thể truy cập thông qua PHP vì nó không bao giờ được truyền tới máy chủ.

Tuy nhiên, bạn có thể lấy JavaScript bằng JavaScript qua window.location.hash, sau đó truyền nó tới máy chủ qua AJAX.

+0

cảm ơn, tôi cho rằng tôi sẽ phải chuyển hướng – fesja

2

Neo, như bạn đã nói, là thông tin được trình duyệt sử dụng - và không được gửi tới máy chủ khi thực hiện yêu cầu HTT GET chuẩn.

Điều này có nghĩa là không có cách nào cho kịch bản PHP của bạn để có được thông tin rằng ...


... trừ khi bạn cố gắng sử dụng một số dựa trên Javascript kỳ diệu, như sử dụng một yêu cầu Ajax, gửi một số tham số thêm vào một số mà sẽ chứa giá trị của neo, hoặc một cái gì đó như thế ... nhưng đó sẽ không phải là một cách tiêu chuẩn để làm việc, và tôi sẽ không khuyên bạn nên làm điều này ...

0

window.location.hash is cách duy nhất ("băm"/anchor chỉ là phía máy khách, không bao giờ có thể nhìn thấy bởi các máy chủ), nhưng không có gì cấm bạn thao tác chuỗi truy vấn (chuyển đổi thành các tham số GET) hoặc xây dựng một MẪU bằng cách sử dụng JS và chuyển đổi thành thông số POST.

Đó là những điều cơ bản để xây dựng trình xử lý/trình xử lý yêu cầu javascript AJAX. Nhưng cuối cùng, bạn nên kết thúc tạo một địa chỉ GET/POST "bình thường" để gửi yêu cầu của bạn đến.

Bạn cũng có thể lưu trữ trong một cookie băm, nhưng một lần nữa, tôi sẽ không sử dụng nó làm cách để xử lý định tuyến hoặc truyền dữ liệu.