Flash AS2相当于URLRequest / URLLoader,所以我可以POST JSON

时间:2010-11-10 21:50:09

标签: flash json actionscript-2

所有

我正在开发一个消耗和发送JSON的Flash AS2项目。

我正在使用http://json.org/json.as来接收和解析JSON - 它运行得很好。

这就是麻烦 - 其中一个要求是应用程序POST JSON到Web服务。

在之前的项目中,我使用了LoadVars.sendAndLoad(),效果很好。

问题在于,使用loadVars,您正在发送名称/值对。但是,我在此项目中发送JSON的特定服务要求 JSON必须是POST的主体。也就是说,不是名称/值对。

除非我弄错了,否则LoadVars不允许你这样做。

所以,我尝试使用XML.sendAndLoad:

dataAsString = JSON.stringify(json);
var send_xml:XML = new XML(dataAsString);
var response_xml:XML = new XML()
response_xml.onData = function(rawResponseData) {
    trace (rawResponseData);
}
send_xml.sendAndLoad([url], response_xml, "POST");

...因为XML.sendAndLoad()在POST主体中发送它的数据。 (是的,我知道这很难看 - 'new XML(jsonString)'不能生成有效的XML对象。但是......它有效。)

但是,我遇到的障碍是Flash发布的数据被编码 - 引号被替换为“"”。在某些情况下,这样会很好,但我发送JSON的服务不允许这样做。

所以,我正在寻找以下任何解决方案:

  1. 使用LoadVars.sendAndLoad()的方法 不发送数据 名称/值对(即数据) 应该是帖子的主体)
  2. 一种防止XML.sendAndLoad()的方法 来自编码数据HTML 实体(例如"
  3. 从Flash发布数据的另一种方法 到URL
  4. 对于它的价值,AS3处理得非常漂亮。这是一个应该有多容易的例子:

    import com.adobe.serialization.json.*;
    // requires the as3corelib from https://github.com/mikechambers/as3corelib
    
    var request:URLRequest = new URLRequest("[the service URL]");
    request.method = URLRequestMethod.POST;
    request.contentType = 'application/json';
    
    var jsonData:Object = {[application-specific data]};
    request.data = JSON.encode(jsonData);
    
    var loader:URLLoader = new URLLoader();
    loader.load(request);
    

    但是,应用程序的其余部分依赖于大量的遗留AS2代码,因此不幸的是,AS3不是一个选项。

    非常感谢任何建议或建议!

2 个答案:

答案 0 :(得分:1)

您是否考虑过使用中间脚本作为代理?我的意思是一个接收名称=值对的网址,然后将值发布到主网址并返回结果?

答案 1 :(得分:1)

我唯一能想到的是MovieClip.loadVariables,但会更改%20的引号。据我所知,之后您唯一真正的选择是使用ExternalInterface通过JS传递所有内容或使用LocalConnections将数据发送到AS3 swf。 (两者都同样可怕)。