javascript请求动态html而不使用" window.open()"

时间:2014-12-24 02:00:07

标签: javascript jquery dynamic response

我尝试从动态的网页中提取一些数据(js在window.onload上更改内容)。因此,单个http get请求不足以访问所需的数据。 有没有办法在不需要在窗口/标签中呈现网页的情况下执行此操作?我有300个这样的数据请求,并且不想打开300个标签。

现在我有这个:



var w = window.open(url, '_blank');
//$.get(url)
// cannot be used because the data changes dynamically after beeing loaded (via js)
var data
setTimeout(function () {
  var html = w.document.documentElement 
  data = $("smthg", html)
  w.close()
}, 500)




请注意,我需要延迟数据提取,直到"动态"内容存在。

编辑: 数据位于第三方网页上。

1 个答案:

答案 0 :(得分:2)

我认为您尝试访问的网址位于不同的域中,因此您无法直接使用AJAX。但是,如果您有可用的服务器端脚本语言,那么您可以创建自己的代理。

例如使用php:

<?php
// proxy.php

$content = 'File not found.';
$status = 404;

if (isset($_GET['url']) {

  // use curl to get the external URL and put it in a var $content
  $ch = curl_init($_GET['url']);
  curl_setopt(CURLOPT_RETURNTRANSFER, true);
  $content = curl_exec($ch);

  // you could do some error handling here with the status code/content of the response
  // as needed but we will skip all that for now

  if ($content) {
     $status = 200;
  } else {
    $content = 'Error';
    $status = 500;
  } 
}

HttpResponse::status($status);
HttpResponse::setContentType('text/html');
HttpResponse::setData($content);
HttpResponse::send();

现在您可以简单地向proxy.php发出ajax请求,例如:

var data;
$.get('proxy.php', {url: url}, function (html) {
   data = $("smthg", html);
});

当然,如果这些网址不在不同的域上,那么您可以直接使用AJAX:

var data;
$.get(url, function (html) {
   data = $("smthg", html);
});