提问者:小点点

使用PHP从外部URL检索Ajax源数据表数据


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

例如URL:https://datatables.net/examples/data_sources/ajax.html表ID:#示例

我试图用简单的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/>';
}

我也尝试了卷曲URL,但再次表是空的。

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;
}

编辑:谢谢你的评论。在@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的数据,但它表示从源My-URL访问XMLHttpRequest at Tart-URL已被CORS策略阻止:请求的资源上不存在访问控制允许源头。

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


共1个答案

匿名用户

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