如何将大数据发送到服务器?

5
我需要从客户端将XML发送到服务器端。 我的做法是: 首先,在JavaScript中将XML转换为字符串,然后作为URI发布。 变量url的值为“/perl/set_zorder_xml.cgi” + “?” + xmlString + “&” + location + “&” + “nocache =” + randomnumber; xml字符串是包含XML以字符串形式的字符串。 发布函数如下:
if (window.XMLHttpRequest) {
            req_anno = new XMLHttpRequest();
            req_anno.open("POST", url, false);
            req_anno.send();
            }

问题在于当我的XML字符串非常大时,会出现HTML 414错误,即URL过长。 有什么解决办法吗?使用了JavaScript和Perl。

通常你会使用send()方法发送XML,而不是将它添加到查询字符串中。这样做似乎很奇怪,因为你正在使用POST请求进行GET请求。 - adeneo
我是新手,可能会弄得一团糟,请问您能否详细说明可以遵循的程序,因为现在我的结构是这样的。 - Zeeshan
如果您使用 jquery,则可以使用 ajax 方法将请求作为真正的 POST 请求启动。这基本上会将内容与 URL 一起发送。该内容对应于 URL 参数及其值,并不受 URL 长度限制的限制。 - collapsar
1个回答

4
即使您正在进行POST请求,仍然会将数据发送到URL的查询字符串中。相反,您应该将要发送的数据移动为POST数据,并从URL中删除它。
req_anno.open("POST", '/perl/set_zorder_xml.cgi', false);
req_anno.send('xml=' + encodeURIComponent(xmlString));

XHR的.send()方法接受要发送的字符串作为请求体(即POST数据)。

在服务器端,XML字符串值位于哪个参数中?我的意思是哪个参数保存了XML字符串的值。 - Zeeshan
在上面的代码中,数据将位于名为“xml”的POST参数中。正如您在.send()调用中所看到的,我设置了xml=,您可以将其更改为任何参数名称。 - MrCode
在服务器端: 我的代码如下:use CGI; use URI::Escape; require 'globalvariables.pl';

获取 STDIN:

$valStr=read(STDIN, $stdin, $ENV{'CONTENT_LENGTH'});$paramVal=CGI::param();print "Content-Type: text/html\r\n";

header 告诉客户端你正在发送 XML

print "\r\n"; print $valStr; 但是如何打印 XML 值。对于这个基础的东西我很抱歉。
- Zeeshan
我找到答案了,它在以下位置: 使用CGI; 使用URI::Escape; require 'globalvariables.pl';

获取STDIN:

read(STDIN, $stdin, $ENV{'CONTENT_LENGTH'});$paramVal=CGI::param();print "Content-Type: text/html\r\n";

header告诉客户端你发送的是XML

print "\r\n";

参数包含查询字符串

$parameters=$ENV{'QUERY_STRING'}; print $stdin;
- Zeeshan
很高兴您已经让它正常工作了,您也可以使用 use CGI;$q = new CGI;my $value = $q->param('xml'); 这段代码。 - MrCode

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