2009-12-17 70 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