【问题标题】:How do they do it? Dynamic Loading pages/websites ... Framework, script? PHP, jQuery, Ruby?他们是怎么做到的呢?动态加载页面/网站...框架,脚本? PHP、jQuery、Ruby?
【发布时间】:2011-07-19 18:41:43
【问题描述】:

所以我敢肯定,你们中的许多人已经看到甚至使用过看似动态加载页面的网站,但实际上并未更改页面。以及更改地址栏中的 url。

一些很好的例子是 reverbnation.com 和 rdio.com,我敢肯定还有更多来自哪里,但这只是我的想法。

所以我的问题是……他们是怎么做到的?他们使用什么编码语言?是语言的组合吗?你知道任何可能有用的教程吗?

我认为它可能是 ajax、jquery 和 php 的组合。可能使用 iFrame?但我只是好奇是否有我缺少的框架或 jquery 插件。

提前感谢您的帮助。

【问题讨论】:

    标签: php jquery ruby-on-rails css ajax


    【解决方案1】:

    我快速查看他们的代码得知http://www.reverbnation.com/ 正在使用大量 javascript 来使其正常工作。

    基本上你需要: - 一个数据库后端,可以是 mysql。 - 演示文稿的标记语言,比如说 HTML - 像 PHP 这样的编程语言来做逻辑

    您要问的是关于 AJAX,即异步 JavaScript。 在这里,您有一个很好的资源来学习 AJAX 的基础知识: http://www.w3schools.com/Ajax/ajax_intro.asp

    【讨论】:

    • 很好,这就是我计划使用的,只是确定他们是否都只是使用 AJAX 来实现这个效果。
    • 是的,但并非所有情况下都需要数据库,这取决于他的需要...,与 php 之类的编程语言相同,如果一切都非常简单,即使是普通的 html 也可能满足他的要求。 ..(理论上)
    【解决方案2】:

    我可以看到一种非常复杂的方法来做到这一点,即使用服务器为您创建内容,然后将其作为一个整体以比特或整块的形式发送到页面。

    前几天我开始为一个非常简单的客户项目尝试这个,只是创建一些简单的东西。我这样做的原因是能够创建动画来更改内容。

    这是我的想法;

     var href = window.location.href;
    

    这将从地址栏中获取整个href。

    href = href.split("#/");
    

    这也可以通过 # 从一个 有标签

    item = href[1].split("/");
    

    这可以是你喜欢用来分割每个参数项的任何东西。

    lastitem = item[item.length-1]
    

    这会将数组的最后一项添加到 var 中。此时,我唯一需要找到包含我想要的内容的正确页面。

    这样我把链接分成两部分,第一个是hash标签后面的href,最后一个“item”是每个结束链接。

    所以只有一个索引文件,其他所有内容都使用 jquery ajax url 添加到内容区域。一开始我检查链接是什么并找到。每个内容都在另一个 php 文件中。但是 jquery 也可以获取一个 html 文件,然后使用 ajax url 在任何你想要的地方添加它的内容。

    当文档准备好时,我检查参数中的最后一项(在 / 之后)是什么。然后我有一个同名的 php 文件,我找到它并将其添加到内容区域。

    $.ajax({
      url: lastitem'.php',
      success: function(data) {
        $('.content').html(data);
      }
    });
    

    然后链接将使用 jquery .click()。如果有一个名为“about”的站点,则该链接的 href 可以是 <a href="#/about">About us</a> 。然后这会将其添加到地址栏中 url 的末尾。

    点击事件可以是这样的

    $("a").click(function() {
    
       var href = $(this).attr(href);
       href = href.split(#/);
       href = href[href.length-1];
    
      $.ajax({
        url: href'.php',
        success: function(data) {
          $('.content').html(data);
        }
    
      });
    
    
    });
    

    这只是一个简单的想法,我将尝试一下。

    【讨论】:

      【解决方案3】:

      此类解决方案的一般类别称为“ajax”。

      这个想法是,在请求一些数据后,您不会关闭与 Web 服务器的连接,并且 Web 服务器会推送替换的“网页部分”。根据您的喜好,这些替换项目由网页的未替换部分侦听,并由 Web 浏览器(简单的 html 更改)或 Web 浏览器中的 javascript 引擎(替换时触发的代码)进行相应处理.

      此技术可以在 Web 服务器端以任何语言完成,但必须在 Web 客户端以 javascript 完成。这是因为 javascript 是唯一一种保证内置在每个现代网络浏览器中的语言。

      虽然简单,但this resource 应该可以帮助您入门。

      【讨论】:

      • 这是一种解释,但我看到过 URL 更改但页面未重新加载的网站。例如 GitHub,请转到此处并单击文件/文件夹:github.com/rails/jquery-ujs
      • "as well as the url" 让人认为 URL 没有改变,而你之前所说的是其他东西没有改变。如果您希望更改 URL,请执行 http 重定向。
      • @Edwin 谢谢!我认为他们使用 ajax 只是不确定是否还有其他一些很酷的技术我错过了,他们似乎都非常流畅地工作。
      • @Jerry 将 AJAX 视为一种技术,这些网站可能都在使用许多略有不同的酷技术来实现 AJAX 框架。可以用很少或用很多来做 AJAX。
      • 可以通过location.hash来更改URL,这也与AJAX有关:stackoverflow.com/questions/1457/…
      【解决方案4】:

      【讨论】:

      • 非常感谢!没想到它是通过 HTML5 实现的 History pushState ---- 就是我在许多其他使用 /#!/ 符号的网站(如 lifehacker/twitter)上看到的。
      • 同上,这就是我的想法。 :) 如果这能解决您的问题,请查看我的回答。
      【解决方案5】:

      不要被误导,因为 javascript 框架是使用 javascript 制作的,这意味着任何事情都可以使用 vanilla js 完成。

      根据我的经验,加载脚本时,整个渲染视图也可能会发生变化,这是因为可以在 javascript 文件中使用 javascript 创建 HTML 标记。

      假设在 script1.js 中你有一个类似的标记

      let template = `<div>Loaded in script1</div>`
      document.body.innerHTML = template;
      

      在 script2.js 中

      let template = `<div>Loaded in script2</div>`
      document.body.innerHTML = template;
      

      如您所见,当加载两个脚本文件中的任何一个时,都必须卸载,如果是这样,渲染的视图将根据加载的脚本动态变化。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-24
        • 1970-01-01
        • 1970-01-01
        • 2011-03-04
        • 2011-01-26
        • 2012-10-29
        相关资源
        最近更新 更多