2016-01-04 15 views
8

Ví dụ tốt nhất về những gì tôi đang cố gắng làm là hệ thống điều hướng của YouTube. Nếu bạn nhấp vào liên kết tới video, thanh màu đỏ ở đầu trang sẽ hiển thị cho biết số lượng trang được yêu cầu đã tải. Khi trang được yêu cầu tải xong, ngay lập tức sẽ thay thế nội dung của trang trước đó và video bắt đầu tải. Một số điều đang xảy ra để làm cho điều này liền mạch nhất có thể.Làm cách nào để tải các trang có JavaScript thay vì chuyển hướng?

  • URL được sửa đổi để khớp với trang mới.
  • Không có chuyển hướng (Điều này rất khó giải thích).
  • Trang mới được thêm vào Lịch sử.
  • Điều hướng quay lại và Forth hoạt động liền mạch.

tôi sửa đổi URL với:

window.history.pushState("object or string", "Title", "/new-url"); 

Tôi đã cố gắng để tải trang bạn yêu cầu với:

$.("html").load("newPage.php", function(){}); 

này sẽ thay thế mã toàn bộ trang trước với mã trang mới. Một số vấn đề với điều này:

  • Điều hướng quay lại hoạt động với URL, nhưng trình xử lý sự kiện phải phát hiện và tải trang thích hợp. Tôi sử dụng này:

    $(window).on('popstate', function() { 
        $('html').load("../"+window.location.pathname, {page:"account"}); 
    }); 
    
  • Sử dụng $.load() không thể (không nên) tải bất kỳ kịch bản mới thẻ thẻ script vì Synchronous XMLHttpRequest on the main thread is deprecated

Những gì tôi muốn để có thể làm:

  • Liền mạch tải trang không có chuyển hướng bằng cách sử dụng JQuery và AJAX
  • Để trang mới có thể có tập lệnh mới và thẻ PHP (PHP có thể là không thể và tôi có thể phải sử dụng AJAX để nhân rộng điều này).

Nguồn:

Updating address bar with new URL without hash or reloading the page

Load HTML page dynamically into div with jQuery

JS or Jquery browser back button click detector

Synchronous XMLHttpRequest on the main thread is deprecated

+0

Chào mừng bạn đến với SO - bạn đã thử những gì? Chúng tôi rất sẵn lòng trợ giúp nhưng không thể viết mã cho bạn –

+0

Tôi đã hiển thị những gì tôi đã thử trong các phần được mã hóa, nhưng các phương pháp được sử dụng không được dùng nữa và khá cẩu thả. Tôi đang tìm một thư viện các loại có thể làm tất cả những công việc khó khăn cho tôi. Bạn có thể thấy các nguồn của tôi và tại sao chúng không hoạt động ở phía dưới. – Damen

+1

Điều này có thể không liên quan đến bạn, vì bạn cụ thể trong các thẻ của bạn, nhưng sẽ không phải là một khung MVC front-end như AngularJS giải quyết rất nhiều vấn đề của bạn? (có thể phải bỏ PHP cho các lượt xem). – Drumbeg

Trả lời

0

Thư viện history.js thực hiện tất cả công việc khó khăn trong việc xử lý lịch sử và tôi chỉ phải lo lắng về điều hướng, điều này thật dễ dàng. Tất cả những gì tôi cần làm là có tất cả các tập lệnh được tải trên tải ban đầu của trang (khi người dùng lần đầu tiên đến trang web).Sau đó, khi chúng được "chuyển hướng", nội dung trang được thay thế bằng trang chính xác bằng cách sử dụng $("body").load("pageToBeLoaded.php",pageToBeLoaded()). Chức năng pageToBeLoaded() được gọi khi hoàn thành và nó xử lý tất cả nội dung thú vị cho trang mới.

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