使用具有相同名称的多个参数发送HTTP请求

n0r*_*0rd 7 actionscript http

我需要从Flash发送一个类似于以下内容的HTTP请求(并获取XML响应):

http://example.com/somepath?data=1&data=2&data=3
Run Code Online (Sandbox Code Playgroud)

即具有多个共享相同名称但具有不同值的参数.

到目前为止,我使用以下代码来发出HTTP请求:

var resp:XML = new XML();
resp.onLoad = function(success:Boolean) {/*...*/};
resp.ignoreWhite = true;

var req:LoadVars = new LoadVars();
req["someParam1"] = 3;
req["someParam2"] = 12;

req.sendAndLoad("http://example.com/somepath", resp, "GET");
Run Code Online (Sandbox Code Playgroud)

在这种情况下,这不会:只有一个参数具有最后一个值.

我有什么选择?我正在使用动作2.

添加

我想,我可以这样做:

var url:String = myCustomFunctionForBuildingRequestString();
var resp:XML = new XML();
resp.onLoad = function(success:Boolean) {/*...*/};
resp.load(url);
Run Code Online (Sandbox Code Playgroud)

但在那种情况下,我失去了执行POST请求的能力.任何替代品?

更改请求不合适.

Tor*_*amo 6

发送数组数据的标准http方法是

http://example.com/?data[0]=1&data[1]=2
Run Code Online (Sandbox Code Playgroud)

但这也不是错(从评论中添加):

http://example.com/?data[]=1&data[]=2
Run Code Online (Sandbox Code Playgroud)

在实际操作中,发送更多具有相同名称的参数意味着在实践中,除了最后一项以外的所有参数都应被忽略。这是因为在读取变量时,服务器会(在内存中)覆盖与该名称相同的任何项,因为重命名变量不是一种好习惯,也从来没有。

我不太了解AS(无:p),但是您可以将其作为列表或数组或它具有的任何数据结构进行访问。


bac*_*dos 5

尽管 POST 可能对同一个键有多个值,但我会谨慎使用它,因为有些服务器甚至无法正确处理,这可能是不支持的原因......如果你转换“重复”参数到一个列表,整个事情可能会开始窒息,如果一个参数只进来一次,突然间你结束了一个字符串或其他东西......但我想你知道你在做什么......

我很抱歉这么说,但是你想做的事,是不可能在纯AS2 ......唯一可用的2类HTTP是LoadVarsXML......从技术上说也loadVariables,但它会简单地复制从传递的对象属性转换为该请求不会改变您的问题,因为属性是唯一的...

如果你想坚持使用 AS2,你需要一个中间层:

  1. 一个服务器来转接您的电话。如果您有权访问服务器,则为 AS2 客户端创建一个新端点,它将解码请求并将它们传递给普通端点。
  2. 使用 JavaScript。与flash.external::ExternalInterface可以调用JavaScript代码。您需要定义操作完成时的回调,以及您可以调用的 JavaScript 函数(还有其他方法,但这应该足够了)。在 flash 中构建请求字符串,将其泵送到 JavaScript,让 JavaScript 在 POST 请求中将其发送到服务器,并通过回调将响应返回给 flash。

由你决定哪一个更工作......

旁注:在 AS3 中,您将使用flash.net::URLLoaderwith dataFormatset to flash.net::URLLoaderDataFormat.TEXT,然后再次将参数编码为字符串,然后发送它们。