如何使用 Javascript 向远程服务器发送数据

Posted

技术标签:

【中文标题】如何使用 Javascript 向远程服务器发送数据【英文标题】:How to send data to remote server using Javascript 【发布时间】:2011-06-30 07:05:46 【问题描述】:

我需要使用 javascript 将数据发送到远程服务器。我该怎么做?

背景信息: 有一个网页,我使用JS从中提取了一些信息,我需要将其发送回另一台服务器进行处理。响应不是必需的。数据是 XML,我已经对其进行了 URL 编码。

如何做到这一点?

编辑

我从中请求数据的服务器与接收数据的服务器不同。只是为了澄清。

【问题讨论】:

使用 XMLHttpRequest - 你还需要检查跨域策略吗? 远程服务器上有什么样的端点?它可以通过 HTTP 进行通信吗? 这是什么意思?如果您要问的是,它上面是否有网络服务器,那么是的,它有! javaScript 强制?为什么不是 jQuery? jQuery IS JavaScript...而且 jQuery 在跨域访问方面没有比普通 Ajax 更好的运气 【参考方案1】:

执行此操作的最常见方法之一是 AJAX。以下是使用 jQuery 执行 AJAX 发布请求的方法:

<script type="text/javascript">
  $.post('/remote-url', xml: yourXMLString );
</script>

在服务器端,您可以像处理任何其他 POST 请求一样处理它。如果您使用的是 php,则为 $xml = $_POST['xml'];

AJAX 的最大限制是您只能向加载文档的同一个域发出请求(也称为跨域策略)。有多种方法可以克服这个限制,最简单的方法之一是JSONP。


UPD。对于跨域请求,一个极其简单(虽然不是通用)的解决方案是:

(new Image).src = 'http://example.com/save-xml?xml=' + escape(yourXMLString)

这将发出一个 GET 请求(在 Internet Explorer 中不能超过 2KB)。如果您绝对需要 POST 请求或支持更大的请求主体,您可以在您的域上使用中间服务器端脚本,也可以将动态创建的 html 表单发布到 iframe。

【讨论】:

请再次阅读问题。我明确指出,它是一个远程服务器,也就是说,它与加载页面不同。 @Janis 请熟悉远程服务器是什么。远程服务器是“不连接到用户键盘但他或她可以在一定程度上控制它的计算机,无论它是在同一个房间、建筑物的另一部分还是世界的另一部分。也称为远程计算机或远程主机”。顺便说一句,我在回答中解决了跨域请求。 我认为 JSONP 会像图像一样工作。既然不需要退货,那图像应该就够了。 +1 更新和 (new Image).src 语法。【参考方案2】: 使用 POST 提交表单。这适用于所有跨域浏览器。让服务器处理帖子。如果要模拟 AJAX,可以将表单提交到隐藏框架 使用Cross Domain Resource Sharing (MDC) (IE XDR)

使用网络错误(创建图像,将源设置为您想要的 url - 仅限小型 GET 请求)

var img = new Image();img.src="http://www.otherserver.com/getxml?xml="+encodeURIComponent(yourXML); (糟糕,我看到 Lebedev 在他的更新中或多或少做了相同的事情)

使用proxy,即让您的服务器为您与另一台服务器通信

【讨论】:

【参考方案3】:

查看 Javascript 的 XMLHTTPRequest 方法——或者从 Google 搜索 AJAX 开始。有很多方法可以做到这一点——包括通过 jQuery 等 JS 库的一些非常简单的方法——但更具体的答案需要你使用的特定技术的更多细节。

编辑:您可以将 AJAX 请求设置为发布到您自己域上的服务器端脚本(充当代理),然后让该脚本转过来并将数据发布到您的远程服务器。

【讨论】:

不会有跨服务器问题吗?

以上是关于如何使用 Javascript 向远程服务器发送数据的主要内容,如果未能解决你的问题,请参考以下文章

如何确定向远程 Spring Boot 服务器发送请求的 URL?

如何使用 vue 或 javascript 向服务器发送密码?

如何在不同进程中从远程服务向 IPC 客户端发送数据

能向远程主机发送cmd命令,如何使用cmd传送本机文件?

如何使用 syslog.h 将消息发送到远程 syslog

如何通过 SSH 连接向 Telnet 发送命令