使用 jquery load() 加载动态内容

Load dynamic content using jquery load()

提问人:Choxmi 提问时间:4/16/2018 最后编辑:NimanthaChoxmi 更新时间:11/17/2023 访问量:1225

问:

jQuery load() 可用于从另一个页面加载组件。

$( "#result" ).load( "ajax/test.html #container" );

但是,如果包含一些动态加载的元素,则 load() 函数不会在元素中呈现这些动态组件。#container#result

例如:客户评论页面动态加载用户评论。因此,注释不能显示在元素内部。#result

是否可以使用函数来实现这一点,或者是否有任何其他方法可以实现这一点。load()

JavaScript jQuery AJAX

评论

0赞 Choxmi 4/16/2018
请在投反对票之前发表评论
2赞 ICE 4/16/2018
1. 获取页面内容。2. 从该内容中按 Id 获取元素。3. 将其插入所需位置。target-div
1赞 flyingfox 4/16/2018
@Choxmi我认为这是不可能的,因为你无法知道动态加载何时完成,除非你有相关的事件方法调用
1赞 Developer107 4/16/2018
由于浏览器安全限制,大多数“Ajax”请求都受同源策略的约束;请求无法成功从其他域、子域、端口或协议检索数据。来源自文档 - api.jquery.com/load.load()
1赞 Lajos Arpad 4/16/2018
你收到任何错误消息吗?

答:

0赞 mooga 4/16/2018 #1

为什么不使用,否则您需要管理这些网站,因为您需要编辑和制作iframe.htaccessallow-access

评论

1赞 ICE 4/16/2018
如果你想从中获取元素,iframe 会给你同样的跨域问题。
2赞 Adrian Wragg 4/16/2018 #2

您遇到的一个问题归结为问题的这一部分:

源页面有一些动态加载的元素

一旦你解决了CORS及其同类问题,你所要做的仍然是要求远程服务器提供一个静态文件并渲染它。

但是,在源站点上,您几乎肯定会找到填充这些元素的其他脚本;这些脚本在源服务器上运行,但不会由当前代码执行。您需要在自己的站点上复制这些脚本的执行,包括提取其他数据。

一个更简单的解决方案是询问源站点的所有者,他们是否有外部可用的 API,这将允许您提取此数据并自动呈现它。

评论

0赞 ICE 4/16/2018
API 是跨域的最佳解决方案,因为如果它们更改元素 ID 或结构,可能会产生不希望的结果。
0赞 Choxmi 4/16/2018
感谢您的建议@Adrian.因为我正在为源页面使用插件,并且我与插件所有者没有任何联系。:(
1赞 ICE 4/17/2018
@Choxmi如果您无法创建 API 或请求 API,那么唯一的解决方案就是我提供的东西。您应该在服务器上获取它,而不是在客户端获取它。
1赞 Choxmi 4/17/2018
@ICE谢谢。是的,这似乎是我唯一的选择。:(
0赞 Adrian Wragg 4/17/2018
@Choxmi 如果你能算出源站点发出的调用,并且它没有违反他们的条款和条件(首先检查),你可以考虑编写自己的API(完全避免CORS问题)并从你的站点调用它。
1赞 ICE 4/16/2018 #3

在PHP上,对于跨域,您可以获得如下元素:

//url
$url = 'https://url.com'; 

//get content from the URL
$cotnent = file_get_contents($url);

//disable errors
libxml_use_internal_errors(true);

//Load HTML
$dochtml = new DOMDocument();
$dochtml->loadHTML($cotnent);

//Get the ID that you want
$elm = $dochtml->getElementById('elementid');

if ($elm){
    //elm content
    echo $elm->nodeValue;
}