2011-12-11 46 views
2

我想在用戶單擊動畫片段時在同一個選項卡上打開網頁。我正在使用這種方法:從閃存(AS3)打開發送POST變量的網頁

var url:String = "http://www.google.com"; 
var request:URLRequest = new URLRequest(url); 
try { 
    navigateToURL(request); 
} catch (e:Error) { 
    trace("Error occurred!"); 
} 

但我不知道如何打開它發送POST變量。那可能嗎?

回答

10

是的,可以通過指定POST作爲URLRequest的方法,並使用flash.net.URLVariables作爲變量。這是從文檔的例子:

http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/net/URLRequest.html

package { 
    import flash.display.Sprite; 
    import flash.net.navigateToURL; 
    import flash.net.URLRequest; 
    import flash.net.URLRequestMethod; 
    import flash.net.URLVariables; 

    public class URLRequest_method extends Sprite { 

     public function URLRequest_method() { 
      var url:String = "http://www.[yourDomain].com/application.jsp"; 
      var request:URLRequest = new URLRequest(url); 

      var variables:URLVariables = new URLVariables(); 
      variables.exampleSessionId = new Date().getTime(); 
      variables.exampleUserLabel = "guest"; 
      request.data = variables; 
      request.method = URLRequestMethod.POST; 

      navigateToURL(request); 
     } 
    } 
} 
+1

由於某些原因,變量是使用GET而不是POST發送的,有什麼想法? – DomingoSL

+1

即使你做request.method = URLRequestMethod.POST?我從某個地方讀取了從Flash IDE執行上述代碼的任何地方總是使用GET,但POST在瀏覽器中運行時將工作。此外,曾經有(也許還是)一個奇怪的錯誤,使用字符串「POST」將工作,但不是URLRequestMethod.POST常量。所以你可以嘗試request.method =「POST」而不是request.method = URLRequestMethod.POST。 –

+0

@DomingoSL你解決了嗎? –

1

關於爲「子問題」上面:

爲增值經銷商使用GET而不是POST發送一些原因,任何 想法?

該職位AS3 POST Request sending as a GET可能會幫助,如果你在這個職位和我一樣蹣跚。 基本思路是:不要讓request.data變爲空/空。只需添加「虛擬」或「不顯眼」(從服務器的角度來看),如request.data =「\ r \ n」;這應該防止Flash運行時用「GET」覆蓋您的「POST」請求。它爲我工作(感謝我的服務器端應用程序。足夠健壯,可以很好地處理以空參數開頭的查詢字符串具有空鍵和空值)。

0

如果在Flash Player中運行且引用的表單沒有主體,則即使該方法設置爲URLRequestMethod.POST,Flash Player也會自動使用GET操作。出於這個原因,建議始終包含一個「虛擬」主體以確保使用正確的方法。