javascript - 将发布数据发送到远程站点并显示结果

标签 javascript html ajax forms cross-domain

我在这里阅读了很多帖子,询问大致相同的事情,但通常询问的人可以访问远程站点,并且可以使用可用的方法来实现此目的。我的情况有点不同,我只是想在花时间和精力尝试让它发挥作用之前看看是否可行。

我尝试访问的站点是远程站点,无论如何我都无法访问它,并且只能从登录 OpenVPN 的计算机进行访问。

我正在编写的工具正在尝试获取从远程站点提交的表单的结果。我不想解析结果或以任何方式修改它。我只想显示发送了发布数据的页面。远程站点使用 AJAX 进行表单提交。

其代码如下:

<form name="MyForm" action="response_normal.php" method="post" onsubmit="xmlhttpPost('response_ajax_v2.php', 'MyForm', 'response', '<img src=\'pleasewait.gif\'>'); return false;">

在该页面上提交后,将发送三个值:

site : radio1
search : 000000000000
submit : Search Site

我是否可以简单地将帖子数据发送到页面并显示它?我希望在 iframe 中执行此操作 - 因为由于 VPN 限制,我无法在服务器端执行此操作。

最佳答案

由于您访问异地服务器的计算机位于可以访问远程系统的 VPN 上(并且假设此远程系统在您的控制之下),因此您可以让异地服务器返回一些 AJAX 拉取的 JavaScript它需要使用类似 JSONP 的策略从远程系统获取数据(在本例中为完整的 HTML 页面)。

我过去曾在一些小项目中使用过这种技术。

从那里,您可以自由地处理数据 - 修改它,按原样返回它,或以其他方式。

就我个人而言,如果可能的话,我会避免使用框架。当然,当时间紧迫时,一切皆有可能;)

但是,如果远程系统不在您的控制之下(并且他们没有强大的 CORS 交叉访问策略),您唯一的选择是,正如您在正文中所说的那样问题,框架。这是一个例子:

<!-- If the remote system is NOT under your control, it CANNOT respond with the X-Frame-Options header set to SAMEORIGIN or DENY! -->
<iframe id="inlineframe" src="http://www.randomwebsite.com" frameborder="0" scrolling="auto" width="800" height="300" marginwidth="5" marginheight="5" ></iframe>

//Depending on the JS you put here, you may get some "unsafe Javascript" warnings from certain browsers
~function()
{
    var frame = document.getElementById('inlineframe'),
        ref = frame.contentWindow ? frame.contentWindow.document : frame.contentDocument;

    // ref is now a reference to the document of the content within the iframe
    // You can now do your getElementById/getElementByTagName etc. and otherwise
    // manipulate the response as you please.
    console.log(ref);
}();

可以在这里找到一个工作示例:http://jsfiddle.net/FTudJ/

iframe 的内容应该是远程页面提交的结果,或者远程服务器响应的任何内容。如果您不想修改任何内容,那么您甚至不需要 Javascript 组件。

key 是您指定为 iframe 源的 URL。现在,如果远程系统不支持表单提交的 GET 请求(在您的示例代码中我看到一个“POST”方法),再加上您无法控制它并且您的异地系统无法访问它无论如何,您唯一的其他选择是:

  • 无需直接提供表单的提交 URL,只需向 iframe 提供表单的典型访问 URL。从那里,使用 JavaScript 使用必要的值填充表单,然后在 iframe 中提交表单,就像您是用户一样。从那里,您可以将结果抓取回 JavaScript 中或直接按原样显示它们。

  • 找到一种方法将您的异地服务器接入 VPN 网络,以便它可以代表您与远程系统进行通信。当然,如果这很容易,我想你会先这样做的!

  • 将您的用户重定向到远程站点 - 可能使用框架集 + 横幅框架,就像 Google 过去所做的那样,让他们在那里做他们需要做的事情,然后告诉他们完成后返回。

--

我发现您正在使用 PHP。只要执行 PHP 的服务器能够访问能够访问此远程系统的 VPN(全部通过传统 HTTP),来自服务器端的简单的 curl 调用就足够了,因为您可以使用 AJAX 来传递结果给客户。

这些链接可能会有所帮助:

关于javascript - 将发布数据发送到远程站点并显示结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15458547/

相关文章:

java - Wicket:如何在 session 内同步请求

JavaScript:从页面中删除当前的鼠标突出显示?

javascript - 将脚本放在头部和 body 中有什么区别?

html - 使用 DIV 在 CSS 中进行多框布局

html - 显示图像、一些用省略号修剪的文本,然后是一个图标

javascript - 我如何将下拉值传递给ajax Controller ?

javascript - JQuery 将字符串识别为函数动态回调

asp.net - 在 asp.net GridView 中实现 javascript 排序

javascript - AngularJS:通过JS在输入框内写入,不传输JSON中的值

html - 可滚动 flex 内容内的可滚动 flex 内容