Javascript 将Post数据发送到远程站点并显示结果

Javascript 将Post数据发送到远程站点并显示结果,javascript,html,ajax,forms,cross-domain,Javascript,Html,Ajax,Forms,Cross Domain,我在这里读过不少帖子,问的问题大致相同,但通常询问者可以访问远程站点,并可以使用可用的方法来实现这一点。我的情况有点不同,我只是想在花时间和精力让它发挥作用之前看看它是否可行 我试图访问的站点是远程的,无论如何我都无法访问它,只能通过登录到OpenVPN的计算机访问 我正在编写的工具试图从远程站点获取表单提交的结果。无论如何,我不想解析结果或修改它。我只想显示发送了Post数据的页面。远程站点使用AJAX进行表单提交 其代码如下所示: <form name="MyForm" action=

我在这里读过不少帖子,问的问题大致相同,但通常询问者可以访问远程站点,并可以使用可用的方法来实现这一点。我的情况有点不同,我只是想在花时间和精力让它发挥作用之前看看它是否可行

我试图访问的站点是远程的,无论如何我都无法访问它,只能通过登录到OpenVPN的计算机访问

我正在编写的工具试图从远程站点获取表单提交的结果。无论如何,我不想解析结果或修改它。我只想显示发送了Post数据的页面。远程站点使用AJAX进行表单提交

其代码如下所示:

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

我是否可以简单地将post数据发送到页面并显示它?我希望在iframe中这样做,因为由于VPN限制,我无法在服务器端这样做。

因为您访问异地服务器的计算机位于可以访问远程系统的VPN上(假设此远程系统在您的控制下),您可以让非现场服务器返回一些JavaScript,AJAX使用类似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);
}();

//根据您在此处放置的JS,您可能会从某些浏览器收到一些“不安全Javascript”警告
~function()
{
var frame=document.getElementById('inlineframe'),
ref=frame.contentWindow?frame.contentWindow.document:frame.contentDocument;
//ref现在是对iframe中内容的文档的引用
//现在可以执行getElementById/getElementByTagName等操作
//根据您的意愿操纵响应。
控制台日志(ref);
}();
可在此处找到一个工作示例:

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

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

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

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

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

--

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

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


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

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

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

就我个人而言,如果可能的话,我会避免使用框架。当然,当时间紧迫时,没有什么是不受限制的;)

但是,如果远程系统不在您的控制之下(并且他们没有一个非常棒的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);
}();

//根据您在此处放置的JS,您可能会从某些浏览器收到一些“不安全Javascript”警告
~function()
{
var frame=document.getElementById('inlineframe'),
ref=frame.contentWindow?frame.contentWindow.document:frame.contentDocument;
//ref现在是对iframe中内容的文档的引用
//现在可以执行getElementById/getElementByTagName等操作
//根据您的意愿操纵响应。
控制台日志(ref);
}();
可在此处找到一个工作示例:

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

该键将是指定为iframe源的URL。现在,如果远程系统不支持