2009-12-17 72 views
0

全部,AS2:xml.sendAndLoad是否使用POST或GET?

我试图找出明确的方法(GET或POST)Flash/AS2使用XML.sendAndLoad。

这里是帮助/文档(http://livedocs.adobe.com/flash/9.0/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&file=00002340.html)说的功能

编码上述指定的XML对象为 XML文档,使用POST方法将其发送到 指定的URL, 下载服务器响应,并且 将它加载到参数中指定的resultXMLobject 中。

但是,我使用这种方法将XML数据发送到另一个开发团队开发和维护的Java Servlet。而他们看到的是这个样子的日志条目:

GET /portal/delegate/[someService]?svc=setPayCheckInfo&XMLStr=[an encoded version of the XML I send] 

谷歌搜索后,要弄清楚为什么POST显示为在其日志中的GET,我发现这个的Adobe技术说明(http://kb2.adobe.com/cps/159/tn_15908.html)。下面是这样说的:

当的loadVariables或getURL操作的 用于将数据发送到Java servlet时,它就当指定了POST 方法 会出现数据被发送 使用GET请求, Flash 电影。

发生这种情况是因为Flash以GET/POST混合格式发送 数据。如果 的数据是使用GET 请求发送的,则这些变量将出现在 附加的查询字符串末尾的 的URL中。 Flash使用GET服务器 请求,但包含变量的名称/值对 使用POST在 第二次传输中发送。 虽然这会导致servlet到 触发doGet()方法,但 变量在 服务器请求中仍可用。

我真的不明白这一点。什么是“GET/POST混合格式”?

为什么方法Flash使用(POST或GET)依赖于数据是否被发送到一个Java servlet或其他地方(例如,一个PHP页面?)

任何人都可以理解这一点?提前谢谢了!

干杯, 马特

回答

2

你有没有尝试做这样的事情:

var sendVar=new LoadVars(); 
var xml=new XML("<r>test</r>"); 
sendVar.xml=xml; 
sendVar.svc="setPayCheckInfo"; 

var receiveXML=new XML(); 
function onLoad(success) { 
    if (success) { 
     trace("receive:"+receiveXML); 
    } else { 
     trace('error'); 
    } 
} 
receiveXML.onLoad=onLoad; 
sendVar.sendAndLoad("http://mywebserver", receiveXML, "POST"); 
2

的混合格式仅仅是一个长期的Macromedia发明了油漆过的HTTP的滥用。

对于GET和POST可以做什么,HTTP非常模糊。但是惯例是GET中没有使用消息体。 Adobe通过在消息正文中发送参数来违反此惯例。

无论服务器如何,Flash都会发送相同的请求。你在Servlet中有问题,因为大多数实现(像Tomcat)都忽略GET的消息体。 PHP不关心动词,它也处理GET的消息正文。

+0

“混合格式”其实很常见,我一直认为它是完全有效的。所以恐怕我不同意有一个约定。例如,具有查询参数和服务器表单的.NET页面在回发时的功能相同。 – Skrim 2009-12-17 13:40:55

+0

(是的,我知道使用.NET给出一个标准的例子的讽刺:) :) – Skrim 2009-12-17 13:41:55

+0

我敢打赌你说的是POST,而不是GET。在POST中包含查询参数是很常见的。这仍然是一个POST,没有什么混合。 – 2009-12-17 15:37:17