【发布时间】:2017-02-16 16:48:00
【问题描述】:
我正在尝试从网页获取动态加载的内容。特别是加载到选择的选项。所以如果我这样做:
$options = $html->find('select[class=theSelectClass]')[0]->find('option');
foreach($options as $option){
echo $option->text().'<br>';
}
这按预期工作,我的输出是:
Select an option
为什么?因为其他选项都是页面加载后用JS加载的。所以我的问题是如何在选择中获取这个动态加载的选项?
这是我使用 JS Ajax 和另一个 PHP 页面的尝试:
在我的包含 simple_html_dom 的 php 中:
$html->load_file($base);
$var = '<script>
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
this.responseText;
}
};
xhttp.open("GET", "http://localhost/crawler/ajax.php?param=HelloWorld", true);
xhttp.send();
</script>';
$e = $html->find("body", 0);
$e->outertext = $e->makeup() . $e->innertext . $var . '</body>';
还有我的 ajax.php 文件:
file_put_contents ( 'ajax.txt' , $_GET['param']);
我试图查看是否可以从 html 加载的文件中发送 Ajax 调用,但我觉得我做不到。那么我该如何实现呢?
谢谢
【问题讨论】:
-
but I feel far from being able to do it.有人会因为我这样说而皱眉,但你可以使用 jQuery。有一个简单的 .get() 函数用于将 html 动态加载到元素中。 -
你是说用 jQuery get() 替换 XMLHttpRequest 会解决这个问题吗?如果这是正确的,我真的不明白这有什么帮助,因为 get 函数无论如何都在后面实现了一个 XMLHttpRequest 对象。
-
你当然可以继续使用 XMLHttpRequest,jQuery 的重点是它已经过实战测试,而且你说
but I feel far...,但如果你觉得使用纯 javascript 还不错,那就可以了。你的要求当然是可行的。你可能会发现你没有等待 DOM 准备好,同样你可以在没有 jQuery 的情况下这样做,但是简单的$(function ())也会让 DOM 准备好一点点。 -
我的问题是,既然是生成的代码,不知道选项加载在哪里
-
你可以先用 jQuery 尝试一下,然后在你知道它正在工作时删除它等等。jQuery 有它的用途,一个很好的用途是快速模拟一个想法。使用纯 JavaScript,或者使用经过实战测试的库,选择权在你。哦,这听起来像是一些游戏节目:)
标签: javascript php ajax simple-html-dom dynamic-content