2010-09-02 66 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; 
    } 
} 

我很想知道任何其他解決方案不涉及這樣做,但!