【问题标题】:AJAX Post HTML CodeAJAX 发布 HTML 代码
【发布时间】:2016-09-04 09:45:59
【问题描述】:

我在使用 AJAX 发送一些 HTML 代码时遇到问题,请在下面查看我的代码

<iframe src="http://www.w3schools.com" width="10" height="10" id="awc_frame"></iframe>
<script>var iframe = document.getElementById("awc_frame");</script>

下面是 AJAX 代码

<script> 

    $.ajax({
        type: "POST",
        url: "mobileView.php",
        data: { val : iframe },
        success: function(data){
            console.log(data); 
        }
    })
</script>

代码没有将变量发送到 PHP 文件。查看它发送文本的网络端,即如果我在 iframe 周围放置“”,它会发送此代码 "val = iframe" 但不是 iframe 中的实际代码。 “var iframe”确实起作用并拉回了 iframe 的 HTML 代码

请告诉我我做错了什么。

提前致谢。

编辑:对不起。这不是我需要发送的 iFrame 中的 HTML 代码,而是我需要发送的整个 iFrame 代码。

另一个编辑:当我公司的访问者访问我的网站时,我想要完成什么我希望 Javascript 或 Jquery 从访问者的计算机加载一个内部网站,然后从中获取所有代码将客户端上的网站发送到服务器,服务器将整个 iFrame 代码存储在数据库中。

【问题讨论】:

  • 你想在这里发送什么? IFrame 加载的 HTML?
  • 是的。从 iFrame 加载的整个 HTML 需要发送到 PHP 文档,然后上传到数据库

标签: javascript jquery ajax iframe


【解决方案1】:

这会将整个 html 发送到 iframe 中。

var iframe = $('#awc_frame').html();

【讨论】:

  • 是的。我需要在 iframe 中发送整个 html 代码
【解决方案2】:

首先,var iframe 不包含 iframe 元素的 HTML - 它包含一个 DOM 节点,它是 iframe 元素的一种包装器(它包含该元素的各种属性,包括 HTML)。 接下来,您可能希望等待 iframe 完全加载所有内容,因此您必须绑定到它的 load 事件。

这样的事情应该可以工作:

var $iframe = $("#awc_frame");

$iframe.on("load", function () {
    var iframeHTML = $iframe[0].contentWindow.document.body.innerHTML;
    // jQuery alternative
    var iframeHTML = $iframe.contents().find("body").html();

    $.ajax({
        type: "POST",
        url: "mobileView.php",
        data: {
            val: iframeHTML
        },
        success: function(data){
            console.log(data);
        }
    });
});

在这个例子中超级重要的事情

还有一件事 - 请注意,对于您自己域之外的网站,此代码将不起作用(由于同源政策)。任何其他代码也不起作用。

【讨论】:

  • 那是因为您试图在您自己的域之外获取域。正如我已经说过的 - 这是不可能的。
  • 我不明白,但如果我进入控制台并尝试调用 iframe,它就可以工作。但是为什么不发送代码呢?
  • 阅读同源政策。您已经加载到浏览器中的内容与 JavaScript 允许您引用的内容完全相同。
  • 我在我的服务器上尝试了同样的事情并且遇到了同样的错误。我什至放置了一个允许所有人访问的跨域文件。并且发生了错误。
  • 它正在获取所有代码并将其放在一个 var 中,这没问题,但它不会通过 AJAX 发送到 PHP 脚本。
【解决方案3】:

由于 javascript 在从跨域 iframe 获取 HTML 方面存在问题,因此您无法跨域执行此操作。但是,为什么不直接将 iframe 的 src 属性发送到 PHP 页面,然后只使用 file_get_contents 获取 HTML,然后存储呢?问题解决:

Javascript:

var iframe = $('#awc_frame').prop('src');

$.ajax({
    type: "POST",
    url: "posttest.php",
    data: { val : iframe },
    success: function(data){
        console.log(data); 
    }
});

PHP:

$html = file_get_contents($_POST['val']);

【讨论】:

  • 因为需要加载的页面在一个内网,而web服务器不在该内网域,所以无法加载或访问服务器端的网站。只有客户端才能在域/内联网上看到该页面。
【解决方案4】:

你想做什么?

var iframe = document.getElementById("awc_frame");

上面的代码是你的 iframe 的一个 javascript 对象,它包含很多属性。因为你使用的是 jQuery,你可以通过以下方式得到它:

var iframe = $('#awc_frame');

请记住,上面的代码是它自己在 jquery 对象格式中的元素,你可以像这样得到元素对象:

var iframe = $('#awc_frame')[0];

** 你做错了什么。

如果您尝试获取 iframe HTML 内容:

var iframe_contents = $("#awc_frame").contents();

如果您详细说明您要做什么,我可以更新我的答案以适合您。

* 更新 * 考虑到你想要做什么..

方法#1:(简单方法)

您可以使用 php 来获取您需要的网站内容:

<?php
    $contents = file_get_contents('http://www.w3schools.com');
    // Saving $contents to database...
?>

方法#2:(硬方式)

正如@mdziekon 所说,你首先应该等到你的 iframe 被加载然后:

var iframe = $("#awc_frame");

iframe.on("load", function () {
    var contents = $(this)[0].innerHTML;

    $.ajax({
        type: "POST",
        url: "mobileView.php",
        data: {
            val: contents
        },
        success: function(data){
            console.log(data);
        }
    });
});

希望它能解决你的问题

【讨论】:

  • 是的,我需要代码中的所有这些属性,所以来自 iFrame 的整个代码以及所有完全加载的网站都发送到 PHP 文档。
  • 它认为你最好改变你的场景,而不是在你的浏览器上加载网站内容并将其内容发送到服务器,你可以对你的 PHP 脚本做同样的事情。
  • @HaroonBaig 为什么在 php 脚本中需要 iframe 的属性?
  • 我需要一个客户端用户在他们这边加载一个 iFrame,然后需要将它发送到服务器。
  • 我明白了,你想达到什么目的?将 iframe DOM 发送到服务器是不可能的,因为它没用..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-24
  • 1970-01-01
  • 2012-09-16
相关资源
最近更新 更多