2012-02-09 20 views
6

Tôi đang tạo một ứng dụng web bằng php. tôi đang tải nội dung thông qua yêu cầu dựa trên ajax. khi tôi nhấp vào một siêu liên kết, trang tương ứng được tải xuống thông qua ajax và nội dung được thay thế bằng trang được tìm nạp.Thiết kế tìm nạp trang Ajax yêu cầu địa chỉ thực

hiện tại vấn đề là, tôi cần một href vật lý để tôi có thể triển khai chức năng giống như facebook và cũng duy trì thuộc tính lịch sử trình duyệt. tôi không thể làm một POSTBACK trường học cũ để các trang php như tôi đang làm một hình ảnh chuyển tiếp trong đó các trang hiện tại trang trình bày đi và trang mới slide in

Có cách nào tôi có thể giữ các hình ảnh động và vẫn còn có giá trị physical href và lịch sử.

thiết kế của ứng dụng là như vậy:

  1. ứng dụng lấy một nguồn cấp dữ liệu RSS.
  2. nó tạo DOM cho các nguồn cấp dữ liệu rss đó.
  3. khi nhấp vào bất kỳ dòng tiêu đề nào, trang hoạt ảnh và chuyển đến toàn bộ câu chuyện của nguồn cấp dữ liệu rss.
  4. tôi cần tạo nút "thích" trên trang toàn bộ câu chuyện. nhưng tôi không có url hợp lệ.
+3

Bản sao có thể có của [Sửa đổi URL mà không cần tải lại trang] (http://stackoverflow.com/questions/824349/modify-the-url-without-reloading-the-page) – DaveRandom

+1

không trùng lặp của nó. tôi cần tìm cách tạo một href cố định. không phải tạm thời. href nên duy trì vị trí cho facebook để truy cập nó. – amit

+1

Nó là một bản sao nếu bạn nghĩ về những gì bạn thực sự phải làm ở đây - trừ khi tôi đã hiểu lầm. Tôi giải thích điều này khi bạn muốn sửa đổi nội dung của trang bằng Javascript, nhưng bạn cũng muốn thay đổi URL được hiển thị trong thanh địa chỉ để nếu bạn tải lại URL, cùng một nội dung sẽ được tạo. Vì vậy, những gì bạn thực sự muốn làm là chính xác những gì các câu hỏi khác được yêu cầu. Tôi không nói đây là một câu hỏi * xấu * - đó là lý do tại sao tôi đã không downvoted nó - nhưng tôi nghĩ rằng đó là một dupe. Nhưng nếu tôi đã hiểu lầm, hãy mở rộng chính xác những gì bạn muốn ... – DaveRandom

Trả lời

2

Thứ nhất, nếu bạn cần một URL cho facebook sau đó nghĩ ra một cấu trúc cung cấp cho bạn một, sao cho bạn mã phía máy chủ sẽ tải trang chính xác khi được cung cấp URL đó. Đây có thể là một cái gì đó như http://yourdomain.com/page.php?feed=<feedname>&link=<linknumber>, cho phép bạn kiểm tra các thông số bằng cách sử dụng mảng PHP $_GET. Nếu bạn không có thông số thì hãy tải trang chỉ mục; nếu bạn làm sau đó tải bài viết có liên quan.

Thứ hai, sử dụng một cái gì đó như history.js để cung cấp cho bạn hỗ trợ đa trình duyệt cho chức năng HTML5 pushState() để bạn có thể đặt URL trang khi thực hiện cuộc gọi AJAX mà không yêu cầu trình duyệt tải lại hoàn toàn.

+1

Đúng. Sử dụng plugin lịch sử jQuery. Tôi có mã làm việc ở đây gần như giống như những gì bạn muốn. http://www.capriccioitaliano.com.au/site#menu. mỗi trang được tải qua jQuery.ajax (bài đăng) bằng cách sử dụng plugin lịch sử và có nút tương tự. trong .htaccess u có thể làm 'Options + FollowSymLinks RewriteEngine này On RewriteRule. * -! [E = HTTP_AUTHORIZATION:% {HTTP: Phép}] RewriteCond% {REQUEST_URI} ^/trang web \ .htm RewriteCond% {REQUEST_URI} /site/|(/[^.]*|\.(php|html?|htm|feed|pdf|vcf|raw))$ [NC] RewriteCond% {REQUEST_FILENAME}! -f RewriteCond% {REQUEST_FILENAME}! -d RewriteRule. * Site.htm [L] ' –

0

Bạn phải triển khai điều hướng băm.

Here là hướng dẫn ngắn.

Here là phần giới thiệu mang tính khái niệm hơn.

+0

Trong khi điều này hoạt động tốt trên phía khách hàng, công cụ linter của facebook không chạy javascript, do đó, nó sẽ nhận được nội dung cũ. – DMCS

4

Trong khi câu trả lời của Alexander hoạt động tốt ở phía máy khách, công cụ linter của Facebook không chạy javascript, vì vậy nó sẽ lấy nội dung cũ. Cả hai liên kết đều không cung cấp giải pháp cho điều này.

Những gì cần phải thực hiện là phân tích cú pháp phía máy chủ của url. Xem http://www.php.net/manual/en/function.parse-url.php. Phân đoạn là những gì máy chủ xem như giá trị thẻ băm. Trong mã php của bạn, hiển thị đúng các thẻ og: dựa trên đoạn.

0

Điều này thực sự nghe khá thẳng về phía tôi. Bạn có các url như bình thường, bằng cách sử dụng hàm băm (#), bạn có thể trích xuất thông tin ở cả phía máy khách và phía máy chủ.

Chỉ có một thứ bị thiếu, ở phía máy chủ trước khi bạn trả lại nội dung, kiểm tra chuỗi tác nhân người dùng và so sánh nó với bot facebook (nếu tôi không nhầm nó là "facebookexternalhit"), nếu nó trở thành bot facebook thì hãy trả lại những gì bạn muốn, mô tả url cho một/share (mở dữ liệu meta đồ thị), và nếu nó là chuỗi tác nhân người dùng khác trả lại nội dung như bình thường.

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