【问题标题】:Not getting a full response while sending ajax request to retrieve a whole page发送 ajax 请求以检索整个页面时未获得完整响应
【发布时间】:2017-09-10 06:53:53
【问题描述】:

我正在使用 J-Query Ajax。我想要做的是,我正在发送一个请求以获取我在 bitbaysolutions.com 上托管的页面的整个 html 数据。问题是,当我加载this URL 并输入document.getElementsByTagName("div"); 时,我会在控制台中获得 37 div 元素的列表。但是当我向同一个 URL 发送 ajax 请求并通过 $(response).find('div'); 过滤 div 元素时,我得到的 div 元素列表减少到 25 并且我需要类名 ._myresult 的 div 是失踪。当我简单地发送请求而不过滤它,并将结果作为console.log(response); 输出时,我得到了整个 html 数据,并且我需要获取的 div 元素存在于那里。当我尝试将该 div 过滤为$(response).find('._myresult')); 时,我得到的是:

[prevObject: n.fn.init(35), context: undefined, selector: "._myresult"]
context:undefined
length:0
prevObject:(35) [text, title, text, link, text, meta, text, link, text, link, text, script, text, script, text, script, text, div#login, text, div#signup, text, comment, text, div.fb-reg, text, comment, text, div._myresult, text, div#thanks, text, div#thanks_login, text, script, text]
selector:"._myresult"
__proto__:Object(0)

从上面的结果你可以看到那个过滤器的长度是0,甚至你可以看到div._myresult存在于html中,我可以不过滤就得到它。但是当我尝试提取时,我没有得到所需的元素。

我尝试过的 J-Query Ajax

$.ajax({
  method:"get",
  url: "http://www.bitbaysolutions.com",
  complete : function(){},
  success: function(response){
    var data = response;
    console.log(data);
    //console.log($(data).find('div'));
    //console.log($(data).find('._myresult'));  
  }
 });

您可以访问此URL 并输入document.getElementsByClassName('_myresult')document.getElementsBytagName('div') 以检查我需要的类以及那里存在的 div 元素的数量。

注意:我在 iframe 的 chrome 扩展页面中显示了 https://www.bitbaysolutions.com 页面。喜欢:<iframe src="http://www.bitbaysolutions.com" id="myiframe" style="width: 100%;height: 100%;position: fixed;top: 0;left: 0;border:none;overflow-y:scroll; "></iframe> 和我发出跨源 Ajax 请求,这只能在扩展中实现。

结束一切,我需要通过 Ajax 请求获取类名为 ._myresult 的 div 元素。这就是我所需要的。

【问题讨论】:

  • 显然页面通过运行脚本动态添加元素。 XHR/AJAX 不运行脚本。您必须将 URL 嵌入 iframe 并注入内容脚本以获取元素并通过消息发送回文本,或者尝试在下载的 html 的另一个位置找到您需要的数据(有时它可能在 json您可以解析出的对象)。
  • 不,元素不是通过脚本添加的,它们已经存在了! @wOxxOm
  • 嗯,一定是古怪的 jQuirk 的另一个怪癖。试试 DOMParser: $(new DOMParser().parseFromString(response, 'text/html')).find('div')

标签: javascript jquery html ajax google-chrome-extension


【解决方案1】:
$.get("http://bitbaysolutions.com/", function(page) {
    $(page).find("div").each(function(){
        console.log( this.className );
    });
});

调用这个之后,我根本没有得到 _myresult div,就像 wOxxOm 说的那样,它必须在页面加载后以某种方式动态添加。

您可以使用上面的代码尝试通过您正在使用的扩展页面获取您的 div。替换每个函数并正确选择您的 div,它可能会找到它,因为整个页面是通过 iframe 加载的,就像您说的那样,脚本也将运行并且它应该加载所有内容。

【讨论】:

  • 在一天结束时,要么更改您的 html 代码,因为它看起来很忙,或者将响应视为字符串并从那里提取数据,如果您只需要从中获取一点信息。跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-09
  • 2018-05-28
  • 1970-01-01
  • 2014-03-24
相关资源
最近更新 更多