栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何获得AJAX get-request以等待页面呈现后再返回响应?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何获得AJAX get-request以等待页面呈现后再返回响应?

为了使AJAX“等待页面呈现”,它实际上必须完全处理页面, 获取 并运行
所有包含的CSS和javascript文件。这并不容易,不建议这样做。幸运的是,您仍然不需要这样做。

这是解决此类问题的三种更好的方法:

  1. 资源页面 (mpdining.rewardsnetwork.com,对于这个问题),可能有一个API。如果有,请找到并使用它。如果可以的话,这是您最好的选择。

  2. 分析资源页面的javascript和/或AJAX请求。使用

    GM_xmlhttpRequest()
    直接取刚刚有效载荷数据,而不是试图解析资源页面。

有时,此过程相当容易,但是某些站点需要复杂的交互和/或身份验证。

  1. 将资源页面加载到隐藏的iframe中;将您的Greasemonkey脚本设置为在资源页面和母版页面上运行,并使用中继所需的数据
    postMessage()

尽管您可能必须防止某些页面试图从iframe中“退出”,但是这种方法几乎总是可行的。


使用隐藏的iframe从跨域资源页面获取数据:

Greasemonkey脚本将在普通页面和iframe内的页面上运行。实际上,您可以将同一脚本设置为同时在多个域和两个域上运行。

如果 母版页 和iframed 资源页
都运行GM脚本,则脚本实例可以使用跨域相互通信

postMessage()

例如,假设我们有一个网站,fiddle.jshell.net/9ttvF/show,包含旅游数据,我们要
混搭了 该网站与从匹配数据 资源网站
,jsbin.com/ahacab,使用AJAX获得其有效载荷数据。

目标(主)站点如下所示:

首先,资源站点如下所示:

然后完成如下:

以下脚本:

  1. 将资源页面加载到隐藏的iframe中。
  2. 启动本身在iframed页面上运行的第二个实例。
  3. 等待iframed页面完成,然后根据需要处理结果。
  4. 将所需的有效负载数据发送到在目标(主)页面上运行的GM脚本。
  5. 然后,目标页面的脚本会插入有效载荷数据以完成混搭。

    // ==Userscript==
    // @name _Cross-site, AJAX scrape demo
    // @include http://fiddle.jshell.net/9ttvF/show/
    // @include http://jsbin.com/ahacab*
    // @require http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js
    // @require https://gist.github.com/raw/2625891/waitForKeyElements.js
    // @grant GM_addStyle
    // ==/Userscript==

    if (/fiddle.jshell.net/i.test (location.host) ) {
    console.log (“***Master-page start…”);

    $("#plainResults").before (    '<div id="gmFetchRez">Greasemonkey is fetching results from jsbin.com...</div>');window.addEventListener ("message", receiveMessage, false);$("body").append ('<iframe src="http://jsbin.com/ahacab" id="gmIframe"></iframe>');

    }
    else {
    console.log (“*framed start…”);
    /
    — Wait for the AJAXed-in content…
    /
    waitForKeyElements (“#results table.rezTable”, sendResourcePageData);
    }

    function sendResourcePageData (jNode) {
    console.log (“Results found! Sending them to the main window…”);

    window.top.postMessage (jNode.html(), "*");

    }

    function receiveMessage (event) {
    if (event.origin != "http://jsbin.com”) return;

    $("#gmFetchRez").html (event.data);

    }

    //— Use CSS to control appearances.
    GM_addStyle ( ”
    #gmIframe {
    display: none;
    }
    #gmFetchRez {
    background: lightYellow;
    border: 3px double red;
    padding: 1em;
    }
    ” );


安装并运行脚本后,最终结果如下所示:



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/392161.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号