使用 PHP 从外部 URL 检索服务器端 Ajax 加载的 DataTable 数据

Posted

技术标签:

【中文标题】使用 PHP 从外部 URL 检索服务器端 Ajax 加载的 DataTable 数据【英文标题】:Retrieve server_side Ajax Loaded DataTable data from an external URL using PHP 【发布时间】:2022-01-22 21:45:31 【问题描述】:

如何从使用 Ajax 源数据的 URL 中检索数据表数据。

例如 URL1:https://datatables.net/examples/data_sources/ajax.html 表 ID:#example

例如 URL2:https://datatables.net/examples/data_sources/server_side 表 ID:#example

我尝试使用简单的 dom 进行检索,但是,它带来了 html 和表格标题,但值为空。我认为这是因为值是用 Ajax 加载的。我用过下表。它适用于除 ajax 来源数据之外的其他表。

require_once __DIR__.'/src/simplehtmldom/simple_html_dom.php';

$html = file_get_html('https://datatables.net/examples/data_sources/ajax.html');

$tr = $html->find('table[id=example] tr');

foreach ($tr as $row) 
    foreach ($row->find('td') as $td) 
        echo $td->plaintext.'<br/>';
    
    echo '<hr/>';

我也尝试过卷曲网址,但表格又是空的。

function sovbetov_curl_content($url, $json = false, $show_error = false) 
if (!function_exists('curl_init'))  return file_get_contents($url);  // fallback
$ch = curl_init();
$options = array(
    CURLOPT_SSL_VERIFYPEER => false,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_URL            => $url,
    CURLOPT_HEADER         => false,
);
curl_setopt_array($ch, $options);
$response = curl_exec($ch);
if ($response === false && $show_error) 
    echo 'ERROR: ' . curl_error($ch)."n";

curl_close($ch);
if ($json) 
    return json_decode($response, true);

return $response;

编辑:感谢 cmets。在@Dimitris Filippou 的建议下,我一直在寻找ajax 请求数据源。我要检索数据的网站正在使用这个 javascript

$(document).ready(function ()  
assetListVM =  
dt: null, init: function ()  
    dt = $('#offersImport').dataTable( 
        "dom": dataTableDom, 
        "serverSide": true, 
        "processing": true, 
        "ajax":  
            "url": "/Trade/OffersImportTable", 
            "type": "POST", 
            "datatype": "json", 
            "dataSrc": function (d)  console.log(d); return d.data.rows;  
        

所以,我尝试从上述 URL 请求具有类似 ajax 的数据,但它显示从源我的 URL 访问目标 URL 处的 XMLHttpRequest 已被 CORS 策略阻止:没有“访问控制允许来源”标头存在于请求的资源上。

所以,我想没有办法从该 URL 检索数据。

【问题讨论】:

你可以看一下request,发现table的数据来自这个url 我认为 this page 在解释 DataTables Ajax 方面做得更好。 我注意到了这一点,他们如何加载数据(另一个网站) $(document).ready(function () assetListVM = dt: null, init: function () dt = $('# offerImport').dataTable( "dom": dataTableDom, "serverSide": true, "processing": true, "ajax": "url": "/Trade/OffersImportTable", "type": "POST", "数据类型”:“json”,“dataSrc”:函数(d)console.log(d);返回d.data.rows; 【参考方案1】:

尝试使用一些基于 PHP 的浏览器模拟器,例如 Mink。您可能无法使用 PHP 以任何其他方式获取由 Javascript 生成的数据。

【讨论】:

以上是关于使用 PHP 从外部 URL 检索服务器端 Ajax 加载的 DataTable 数据的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 PHP 从视频 URL 中检索 YouTube 视频详细信息?

PHP WordPress从循环外部检索自定义字段

如何使用 SLUG php mysql 从 url 检索数据

Ghostscript 从外部 url 转换文件

无法从服务器端检索搜索结果:使用Python的Facebook Graph API

PHP 从缩短的URL中检索原始URL