如何动态的添加和删除HTTPService的提交参数

艾思软件-app开发公司 2010-02-24 11:46:20
HTTPService提交参数的列表是动态的.是个数组.
就像html里
<form>
<input name=a>
<input name=a>
<input name=a>
</from>
而且name=a的个数和值是可以动态添删改的

在flex里如何实现呢
...全文
154 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
syeia 2010-03-03
  • 打赏
  • 举报
回复
这样你试试:

params.XXX[]=arr;

我没有式,这样表明你提交的是数组.

可以的话, 说一下.

先式 一维数组
  • 打赏
  • 举报
回复
syeia说的对,是只和数组有关系
我用数组做测试发现,只接收到数组的最后一个.如果是发送的二维数据,那接收到的是最后一维的数组

我用的PHP接收

<?
echo $_POST["p"];
?>


以下是发送一维数组
只能返回

myArray[3]=3

如果发送二维数组,只能返回最后一维
myArray[3][0]=4,myArray[3][1]=5,myArray[3][2]=6

而且还有一个问题
php接收到的会把参传p看做一个字符串,而不是一个数组.php还是要通过逗号把字串分隔成数组

这么看来还不如我自己去组合字符串方便
syeia说 | 不安全, 我用了 || 分隔.二维的时候我用 !~ 分隔
那二维的数组就分组合成了
||a0!~b0||a1!~a2||
到php再解析成数组

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
layout="absolute" fontSize="12" creationComplete="init()"
>
<mx:Script>
<![CDATA[
import mx.controls.Alert;
import mx.rpc.events.ResultEvent;

private var params:URLVariables = new URLVariables();

private var myArray:Array = new Array();

private function init():void{

for(var i:int=0;i<4;i++){
myArray[i] = "myArray["+i+"]=" + i;
};

hs.resultFormat = "text";
hs.url = "http://localhost:8081/test.php"
hs.method = "post";

hs.addEventListener(ResultEvent.RESULT,
function(event:ResultEvent):void{
//Alert.show(event.result.toString());
ta.text += event.result.toString() + "\n----------------------\n";
}
)
}

private function getdata():void
{
Alert.show(myArray.toString());
params.p=myArray;
hs.send(params);
}

]]>
</mx:Script>
<mx:HTTPService id="hs"/>

<mx:TextArea id="ta" x="10" y="42" width="551" height="329"/>
<mx:Button x="10" y="10" label="sent" click="getdata()"/>
</mx:Application>
syeia 2010-03-03
  • 打赏
  • 举报
回复
很不理解.

1 在 mxml 中不固定的(类似<input name=a> ) 做好你这么处理, 最后不也是 封装成数组 剩下的问题就是 固定的,所谓的不固定, 应该是页面显示 这里,根据什么条件显示 多少 (<input name=a>), 你可以根据条件,在把他们的值 封装成数组. 也可以说是动态得到数组.

2 数组固定了, HTTPService 是可以传递数组的. 和HTTPService 其实没有任何关系,关键, 看你这么得到不固定的表单的值.
  • 打赏
  • 举报
回复
楼上几位的方法解决不了我的问题呀


比仿说我有几个产品的信息需要传递.但是产品的数量是不确定的.是用户操作的.

我在服务器端接收的时候.是接收的一个变量.然后用循环把里面和几个用户信息读出来,存入数据库

以上你们的方法只是传递不同的变量.和我的要求是不一样的.




再看一下我的问题


HTTPService提交参数的列表是动态的.是个数组.
就像html里
<form>
<input name=a>
<input name=a>
<input name=a>
</from>
而且name=a的个数和值是可以用户自己添删改的

而我在服务器只是request.querystring["a"] ,得到一个数组(再说一次,这个数组的长度是不固定的)就可以了

syeia 2010-03-03
  • 打赏
  • 举报
回复
怎么会覆盖那.
params.XXX+"i"=arr[i];
就等于多个变量吗?

方法三;
var s:String="data=";
for(i:int=0;i <arr.length;i++){
if(i==0){
s=s+arr[i];
}else{
s=s+"&data="+arr[i];
}
}
这样把 s传过取, 也能得到数组.




  • 打赏
  • 举报
回复
第一个方法应该是传的

params.XXX+"i"=arr[arr.length];

以往的都覆盖了

第二种方法,和我的方法有点类似.

谢谢

结贴了
syeia 2010-03-03
  • 打赏
  • 举报
回复
http://board.flashkit.com/board/showthread.php?t=749747

这里有个, 估计是php 的问题.

你可以这样处理.

方法一:

var params:URLVariables=new URLVariables();
for(i:int;i<arr.length;i++){
params.XXX=arr[i];
}

这样估计就是类似 data="sss"&data="333", 利用数组得到.

方法二:
var params:URLVariables=new URLVariables();
for(i:int;i<arr.length;i++){
params.XXX+"i"=arr[i];
}
params.arrCount=arr.lenght;

php:

得到 arrCount,

循环得到 XXX+"i"

这个方法肯定可以的. 楼主不显麻烦的话,最好式第一个方法.



  • 打赏
  • 举报
回复
我以前就试过,语法错误
CCjian 2010-02-27
  • 打赏
  • 举报
回复
LS说的详细了


不过可以直接参与发送


var params:object={};

params.name1=value1;
params.name2=value2;
....

http.send(params);
syeia 2010-02-26
  • 打赏
  • 举报
回复
风险太大.

如果输入"|".

会不会有问题.

上面说的方法, 有什么问题?
  • 打赏
  • 举报
回复
我还是组合字符串...到服务器端去拆吧


<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
layout="absolute" fontSize="12" creationComplete="init()"
>
<mx:Script>
<![CDATA[
import mx.controls.Alert;
import mx.rpc.events.ResultEvent;

private var params:URLVariables = new URLVariables();

private function init():void{
params.p="|";

hs.resultFormat = "text";
hs.url = "http://localhost:8081/test.php"
hs.method = "post";

hs.addEventListener(ResultEvent.RESULT,
function(event:ResultEvent):void{
//Alert.show(event.result.toString());
ta.text += event.result.toString() + "\n----------------------\n";
}
)
}

private function getdata():void
{
hs.send(params);
}

private function fn_add():void{
params.p += add.text + "|";
txt.text = params.p;
}

private function fn_sub():void{
params.p = params.p.split("|" + sub.text + "|").join("|");
txt.text = params.p;
}
]]>
</mx:Script>
<mx:HTTPService id="hs"/>

<mx:TextArea id="ta" x="110" y="155" width="379" height="226"/>
<mx:Button x="110" y="123" label="sent" click="getdata()"/>

<mx:Button x="110" y="25" label="add" click="fn_add()"/>
<mx:TextInput x="168" y="25" id="add"/>

<mx:Button x="110" y="55" label="sub" click="fn_sub()"/>
<mx:TextInput x="168" y="55" id="sub"/>

<mx:TextInput x="110" y="91" width="379" id="txt"/>
</mx:Application>

  • 打赏
  • 举报
回复
谢谢楼上两位,有没有现成的代码给俺 看看
syeia 2010-02-24
  • 打赏
  • 举报
回复
var arrName:Array;
var dd:URLVariables=new URLVariables();
dd.XXX=arrName;//XXX 是服务器端 接受的名字.


HTTPService.send(dd);

我没有试过,不过,好像是可以传递 数组的.

这样就不用考虑 添加删除了.

变化的只是数组.
archko 2010-02-24
  • 打赏
  • 举报
回复
怎么个动态法?
var myHS:HTTPService = new HTTPService();
myHS.url="catalog.jsp";
myHS.resultFormat = "e4x";
myHS.addEventListener(ResultEvent.RESULT, resultHandler);
myHS.addEventListener(FaultEvent.FAULT, faultHandler);
var params:Object = {};
params["catId"] = cataData[lb.selectedIndex].id; 这里就可以动态产生你要的参数啊如<mx:Input id='t'/>就可以直接获得
myHS.send(params);
syeia 2010-02-24
  • 打赏
  • 举报
回复
httpService.addEventListener(HTTP_RESULT_METHOD, AAAAA);
别误解了,这里是 成功方法的监听
syeia 2010-02-24
  • 打赏
  • 举报
回复
httpService:HTTPService =new HTTPService();
var params:URLVariables=new URLVariables();
params.XXX=arr;
httpService.url=XXXX;
httpService.method=HTTP_SENT_POST;
httpService.resultFormat=HTTPService.RESULT_FORMAT_E4X;
httpService.addEventListener(HTTP_RESULT_METHOD, XXX);
httpService.addEventListener(HTTP_RESULT_FAULT, Fault);
httpService.send(params);


服务器端就接受:

reqeust.getParameter("XXX");

4,328

社区成员

发帖
与我相关
我的任务
社区描述
多媒体/设计 Flex
社区管理员
  • Flex
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧