Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/442.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Ajax在完全处理后读取HTML_Javascript_Jquery_Ajax - Fatal编程技术网

Javascript Ajax在完全处理后读取HTML

Javascript Ajax在完全处理后读取HTML,javascript,jquery,ajax,Javascript,Jquery,Ajax,我正在尝试在我的域之外加载网页的HTML内容,使用jQuery插件提供的功能,我可以很好地完成这项工作:。但是,当我打印出HTML时,会丢失一些片段,我认为这是因为ajax请求在页面完全加载之前获取HTML。当我说“pieces missing”时,我的意思是一些应该包含innerHTML的标记实际上没有。这是我的密码: $.ajax({ crossOrigin: true, url: "http://siriusxm.com/bpm", success: functio

我正在尝试在我的域之外加载网页的HTML内容,使用jQuery插件提供的功能,我可以很好地完成这项工作:。但是,当我打印出HTML时,会丢失一些片段,我认为这是因为ajax请求在页面完全加载之前获取HTML。当我说“pieces missing”时,我的意思是一些应该包含innerHTML的标记实际上没有。这是我的密码:

$.ajax({
    crossOrigin: true,
    url: "http://siriusxm.com/bpm",
    success: function(data) {
        console.log(data);
    },
    timeout: 5000
});
crossOrigin属性来自我提到的插件。无论有没有超时,我都会得到相同的行为(奇怪的是,似乎超时根本没有做任何事情——当我检查控制台时,它会立即记录数据)

有没有办法等到页面完全加载后再获取内容?不管它值多少钱,这都是我正在开发的chrome扩展的一部分,所以如果还有其他代码方面的问题,你可能需要问问


谢谢

如果控制台日志显示了您正在查找的所有数据,那么ajax调用应该可以

成功回调中的任何代码都将在ajax调用之后运行,因此只需在成功回调函数中使用JQuery将数据插入html。我现在看到的只有console.log(数据),除非您删除了一些代码


超时只是给了ajax调用一个在“超时”之前完成的设定时间量,换句话说,它告诉它在设定的时间量之后停止等待。

因此根据您的评论,您要查找的信息只是正在播放的艺术家和歌曲,而仅仅加载主页的源代码是无法获得的

要查找您要查找的数据,只需打开您的Chrome开发工具,转到网络选项卡,然后刷新以查看页面上的所有请求

看起来这就是您想要的请求,您只需每分钟更新一次时间戳:
http://www.siriusxm.com/metadata/pdt/en-us/json/channels/thebeat/timestamp/08-12-03:48:00


只需解析json并获取所需内容。当然,他们总是可以更改文件的位置或格式,但目前情况就是这样。

我对超时功能的误解解释了为什么它看起来没有任何作用。我的目标不是在HTML中插入数据;我只是想看看。具体来说,我想要两个
p
标记的内部HTML,它们的类名分别为“onair pdt artist”和“onair pdt song”。但是当我记录
数据时,这两个标记看起来是这样的:

但是它们里面应该有这样的文本:

迈克尔·杰克逊

比莉·琼

哦,这更有意义。页面的主要来源是将其作为

加载。这意味着他们必须有JS(可能是ajax请求)来获取数据,然后更新标签。这样一来,他们不会在歌曲更改时重新加载整个页面,而是获取新数据并替换它。我明白了,那么你知道解决这个问题的方法吗?或者我是SOL?很抱歉,我以为你在尝试使用数据。也许您可以通过php调用从siriusxm获取数据?看起来@cyk回答了我的问题,但感谢您的帮助Caff3in3fr33!我尝试了您的代码,并将ajax结果与该页面的源代码进行了比较。无显著性差异。我的意思是有一个版本在一个元标记中用“…”替换了“%2Fg”。哈,很有趣。所以我想这会说明这是一个问题,因为它是chrome扩展的一部分,你同意吗?是的,我想是的——我没有编写chrome扩展的经验,所以我不能肯定。但是,如果您想亲自查看,只需打开此页面上的devtools,转到控制台,从ajax cross origin粘贴JS,然后从您的帖子中粘贴代码。与“”的视图源进行比较。我把它们都保存到我的桌面上,然后在我的终端上运行
diff~/desktop/sirius-src.html~/desktop/sirius-src-ajax.html
,看看有什么不同。siriusxm.com/bpm的源代码也没有我想要的——我从代码和页面源代码中也得到了相同的结果。查看我在Caff3in3fr33答案下的评论,了解我想要提取的内容。有什么想法吗?见鬼,看看这个。非常感谢,这正是我想要的。只是好奇,你是怎么知道使用那个URL的?我打开了devtools的网络标签有一段时间了,他们每分钟都在发出同样的请求。