2010-09-02 68 views
0

我试图将现有的AJAX应用移植到Flex,并且无法将发送给后端服务的参数编码。Flex阻止使用HTTPRequest参数的URL编码

当试图执行删除联系人的动作,现有的应用程序执行POST,发送以下内容:(与萤火虫捕获)

contactRequest.contacts[0].contactId=2c33ddc6012a100096326b40a501ec72 

所以,我创建以下代码:

var service:HTTPService; 
function initalizeService():void 
{ 
    service = new HTTPService(); 
    service.url = "http://someservice"; 
    service.method = 'POST'; 
} 
public function sendReq():void 
{ 
    var params:Object = new Object(); 
params['contactRequest.contacts[0].contactId'] = '2c33ddc6012a100097876b40a501ec72'; 
    service.send(params); 
} 

在Firebug,我看到这个发出如下:

Content-type: application/x-www-form-urlencoded 
Content-length: 77 

contactRequest%2Econtacts%5B0%5D%2EcontactId=2c33ddc6012a100097876b40a501ec72 

Flex是URLË在发送它们之前对params进行编码,并且从服务器返回错误。

如何禁用此编码,并获取按原样发送的参数,而无需URL编码?

我觉得contentType属性应该是关键 - 但没有定义的值工作。

此外,我考虑写一个SerializationFilter,但这似乎是矫枉过正 - 有没有更简单的方法?

回答

1

写SerializtionFilter似乎这样的伎俩:

public class MyFilter extends SerializationFilter 
{ 
    public function MyFilter() 
    { 
     super(); 
    } 
    override public function serializeBody(operation:AbstractOperation, obj:Object):Object 
    { 
     var s:String = ""; 
     var classinfo:Object = ObjectUtil.getClassInfo(obj); 

     for each (var p:* in classinfo.properties) 
     { 
      var val:* = obj[p]; 
      if (val != null) 
      { 
       if (s.length > 0) 
        s += "&"; 
       s += StringUtil.substitute("{0}={1}",p,val); 
      } 
     } 
     return s; 
    } 
} 

我很想知道任何其他解决方案不涉及这样做,但!