AJAX改变页面内容

Posted

技术标签:

【中文标题】AJAX改变页面内容【英文标题】:AJAX change page content 【发布时间】:2010-12-05 12:19:33 【问题描述】:

我已经使用 AJAX 成功地更改了网页的内容。我可以包含我域中的另一个网页,但我遇到的问题是使超链接正常工作。如果超链接使用相对寻址,那么相对于我包含它的页面将不起作用,因此我正在研究 php 以在我阅读时解析 html 标记

我正在使用以下 RegExp /href[\s]?=[\s\"\']+(.*?)[\"\']/im 来查找 href 数据,但想要一个关于如何为相对地址添加前缀的指针。

我想替换一个链接 href="./test1/page1.html" 在页面 http://foo.bar.com/folder1/info1/data.html 与 href="http: // foo.bar.com/folder1/info1/./test1/page1.html" 那么如果我包含 /folder1 的页面内容/info1/data.htmlhttp://foo.bar.com/folder2/faraway/another.html 嵌入页面上的链接将正常工作 我正在考虑使用 php preg_replace 函数来做到这一点,但很快就失败了。如果我在错误的树上吠叫并且有更合适的工具或方法,有人可以指出我正确的方向;-)。也许这一切都可以在 javascript 中完成?

【问题讨论】:

在我看来你遇到了组织问题,我会重新审视你的页面是如何组织的......如果它们都在同一台服务器上,只需使用绝对路径,如 '/folder1/whatever. html' 【参考方案1】:

如果你打算在页面上做更多的 javascript,你可以使用 JQuery。

function make_absolute(base_path)
    $("#embedded a").each(function()
        this.attr("href",
                  base_path + this.attr("href")
                  );
    );

将“#embedded”替换为嵌入页面的 ID。

如果您不打算将 javascript 用于其他任何事情,这几乎肯定是矫枉过正,但如果您打算制作一个闪亮的动态 ajaxy 页面,您可能会考虑一下。

奖金: 使用 JQuery 进行 ajax 页面加载:

$("#embedded").load(page_you_want_to_load)

【讨论】:

【参考方案2】:

让 ABentSpoon 的响应更进一步,您的 jQuery 选择器可以搜索所有以斜线开头的锚标记。

$('#embedded a[@href^=/]').each(function() 
    $(this).attr('href', baseUrl + $(this).attr('href'));
);

有关 jQuery 选择器的更多帮助,请转至 here。

【讨论】:

我认为他想要以斜线开头的锚点。有没有办法做到这一点?如果它以斜线开头,那对于大多数用途来说绝对足够了;您无法通过 javascript 从其他网站加载页面。 (或者你可以吗?)【参考方案3】:

为什么不直接使用绝对路径?

【讨论】:

我认为这是因为他正在从另一个站点加载页面,而不一定是他自己的站点。 跨站脚本...哎呀 从 OP 的描述中看起来不像【参考方案4】:

你们确实帮助了我,非常感谢。我认为我需要的正则表达式是/href[\s]?=[\s\"\']\./is,正如 ABentSpoon 指出的那样“如果它以斜线开头,那对于大多数用途来说绝对足够了”。不过,我想这将是一个很好的练习,可以阅读其他网站的页面。幸运的是,我可能希望使用的任何页面都位于同一站点和同一服务器上。

要接受 Jeroen 关于仅使用绝对路径的评论,这并不是一个真正的选择,因为该站点上有很多页面。此外,每个页面的寻址方式也会不同(DNS),具体取决于从内部或外部访问它的位置。如果你给你的链接一个绝对路径,你会将所有链接都与该站点的 DNS 名称联系起来。当您发现这种变化太频繁时会出现问题,或者就此而言,部门认为需要更改其子目录名称,但那是另一回事了。我希望将此功能设计得更灵活一些。

我一定会阅读有关 jQuery 的信息。看起来很有趣,这不是我玩过的东西...更多学习即将到来;-)

再次感谢大家抽出宝贵时间。

【讨论】:

以上是关于AJAX改变页面内容的主要内容,如果未能解决你的问题,请参考以下文章

使用ajax和history.pushState无刷新改变页面URL

Ajax基础入门

js刷新当前页面

关于jQ的Ajax操作

检查用户登录的ajax页面是不是改变

pjax使用小结