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

15
我需要使用JavaScript将数据发送到远程服务器。我该如何做?
背景信息: 有一个网页,我使用JS从中提取一些信息,然后需要将它发送回另一个服务器进行处理,响应不是必需的。数据是XML,我已经进行了URL编码。
你该如何实现这个功能?
编辑: 我请求数据的服务器与接收数据的服务器不同。仅供澄清。

使用XMLHttpRequest - 您还需要检查跨域策略吗? - Phil C
你在远程服务器上有什么样的终端点?它能通过HTTP进行通信吗? - Jimmy Chandra
你是什么意思?如果你问的是它是否有一个Web服务器,那么是的,它有! - Janis Peisenieks
JavaScript是必须的吗?为什么不用jQuery呢? - user284291
1
jQuery就是JavaScript...而且jQuery在进行跨域访问时并没有比普通的Ajax更好的运气。 - mplungjan
3个回答

20

实现此目的最常用的方式之一是使用 AJAX。以下代码演示如何使用 jQuery 发送 AJAX post 请求:

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

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

AJAX 最大的限制是只允许向从加载文档的同一域名下发出请求(也称为跨域策略)。有多种方法可以解决这个限制,其中最简单的一种是使用 JSONP


更新:对于跨域请求,一个极其简单(尽管不普遍适用)的解决方案是:

(new Image).src = 'http://example.com/save-xml?xml=' + escape(yourXMLString)
这将发出一个GET请求(在Internet Explorer中不能超过2KB)。如果您绝对需要POST请求或支持更大的请求体,您可以使用域上的中间服务器脚本,或者将动态创建的HTML表单发布到iframe中。

4
请再次阅读问题。我明确指出,这是一个远程服务器,这意味着它不同于加载页面的服务器。 - Janis Peisenieks
3
@Janis,请熟悉远程服务器是什么。远程服务器是“计算机,不连接到用户的键盘,但用户可以以某种程度控制它,无论它是否在同一房间、建筑物的另一个部分或世界的另一个部分。也称为远程计算机或远程主机”。顺便提一下,我在我的回答中也提到了跨域请求。 - Alexey Lebedev
我认为在这里JSONP会像图片一样工作。由于不需要返回值,所以图片应该足够了。对于更新和(新的Image).src语法,点赞+1。 - mplungjan

6
  • 使用POST方式提交表单,跨浏览器跨域都可以正常工作。让服务器处理POST请求。如果你想模拟AJAX,则可以将表单提交到隐藏的框架中。
  • 使用跨域资源共享MDC)(IE XDR
  • 使用Web Bug(创建一个图像,将源设置为您想要的URL - 仅限较小的GET请求)

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

  • 使用代理,即让您的服务器代替您与其他服务器通信


0

研究一下Javascript的XMLHTTPRequest方法-或者从Google搜索AJAX开始。有很多种方法可以做到这一点,包括通过JS库(如jQuery)非常简单的方式,但更具体的答案需要更多关于您正在使用的具体技术的细节。

编辑:您可以设置AJAX请求以在您自己的域上作为代理运行的服务器端脚本发帖,并让该脚本转身将数据发布到您的远程服务器。


会不会有跨服务器问题? - user284291

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接