我为Basecamp开发了一个adobe air客户端。最近,我们决定将客户从actionscript air转移到Adobe Flex。 当我们将代码移动到flex时,我们遇到了问题。
客户端可以从API中的任何方法加载数据。 但是当它使用API发送数据时会出现问题。
例如, - 客户端可以加载时间跟踪列表。 - 但无法为待办事项创建时间轨道。
我使用URLLoader发送/加载数据。 我没有任何错误或什么。我运行代码,请求到达api,当我读到响应时,我看到了
我检查了所有标题,请求数据,请求网址等...
还有其他人有同样的问题和解决方案吗?
这是我的请求类:
package com.alafortanfoni.pmToolClient.service
{
import flash.net.URLRequest;
import flash.net.URLRequestMethod;
public class BCRequest
{
private var request:URLRequest;
public function BCRequest(url:String, headers:Headers, method:String=URLRequestMethod.GET, data:XML = null)
{
request = new URLRequest();
setHeaders(headers);
setMethod(method);
setURL(url);
setData(data)
}
private function setData(data:XML):void
{
if(data != null)
{
request.data = data;
}
}
private function setURL(url:String):void
{
request.url = url;
}
private function setHeaders(headers:Headers):void
{
request.requestHeaders.push(headers.getAuthorizationHeader());
request.requestHeaders.push(headers.getAcceptHeader());
request.contentType = 'application/xml';
}
private function setMethod(method:String):void
{
request.method = method;
}
public function getRequestObject():URLRequest
{
return request;
}
}
}
这是服务类:
package com.alafortanfoni.pmToolClient.service
{
import com.alafortanfoni.pmToolClient.service.parser.IParser;
import flash.events.Event;
import flash.events.EventDispatcher;
import flash.events.HTTPStatusEvent;
import flash.events.IOErrorEvent;
import flash.events.ProgressEvent;
import flash.net.URLLoader;
public class BCService extends EventDispatcher implements IService
{
public static var userName:String;
public static var userPass:String;
private var request:BCRequest;
private var parser:IParser;
private var loader:URLLoader;
public function BCService(request:BCRequest, parser:IParser)
{
this.request = request;
this.parser = parser;
}
public function execute():void
{
loader = new URLLoader();
loader.addEventListener(Event.COMPLETE, loadCompleteHandler);
loader.addEventListener(Event.INIT, loadCompleteHandler);
loader.addEventListener(IOErrorEvent.IO_ERROR, IOErrorHandler);
loader.addEventListener(ProgressEvent.PROGRESS, onProgress);
loader.addEventListener(HTTPStatusEvent.HTTP_STATUS, onStatus);
loader.addEventListener(HTTPStatusEvent.HTTP_RESPONSE_STATUS, onStatus);
loader.load(request.getRequestObject());
}
protected function onStatus(event:HTTPStatusEvent):void
{
}
private function onProgress(event:ProgressEvent):void
{
trace(event.bytesLoaded, event.bytesTotal);
}
public function cancel():void
{
loader.removeEventListener(Event.COMPLETE, loadCompleteHandler);
loader.removeEventListener(IOErrorEvent.IO_ERROR, IOErrorHandler);
loader.close();
loader = null;
}
protected function IOErrorHandler(event:IOErrorEvent):void
{
dispatchEvent(new BCServiceEvent(BCServiceEvent.FAIL, 'Service Path Not Found'));
}
protected function loadCompleteHandler(event:Event):void
{
var xml:XML = new XML(loader.data);
parser.parse(xml);
dispatchEvent(new BCServiceEvent(BCServiceEvent.COMPLETE, parser.getData()));
}
}
}