2014-01-24 48 views
0

我想用Dart和PHP做一些異步行爲。這是我的代碼:如何以異步方式將數據從Dart發佈到PHP?

var data = new FormData(); 
data.append("name", "testing"); 
var httpRequest = new HttpRequest(); 
httpRequest 
    ..open('POST', path) 
    ..setRequestHeader('Content-type', 'application/x-www-form-urlencoded') 
    ..onLoadEnd.listen((e) => requestComplete(httpRequest)) 
    ..send(data); 

path設置正確。因爲我在做異步操作,所以我不想實際提交整個表單,這就是爲什麼我嘗試製作自己的FormData對象並將需要的信息附加到它的原因。但是,當我在PHP中時,未設置$_POST['name']。我想也許這是請求標題,但我試圖改變它,並沒有幫助。我得到這個工作(設置$_POST['name'])的唯一方法是將data更改爲"name=testing"。我曾嘗試觀看原始post數據,並將其結果是:

------WebKitFormBoundaryUfDGArtA6R3ZWVoj Content-Disposition: form-data; name="name" testing------ 
WebKitFormBoundaryUfDGArtA6R3ZWVoj-- 

提交實際形式(不含非同步)但是給出了正確的行爲。除了key = value字符串之外,還有其他選項嗎?

+0

可能重複的[XMLHttpRequest發佈數據未被髮送](http://stackoverflow.com/questions/21181113/xmlhttprequest-post-data-not-being-sent) – Musa

+0

我昨天嘗試了許多其他答案,沒有任何東西工作...今天,我再次拿出請求標題行,現在它正在工作......我想知道爲什麼當我將內容類型設置爲multipart/form-data時它不起作用。好吧。感謝讓我重試。 – Lathan

+0

問題在於邊界,如果您將其設置在內容類型標題中,它必須與瀏覽器生成的標題匹配。 – Musa

回答

0

它不起作用的原因是當您覆蓋Content-Type標題時,您也覆蓋邊界參數。發佈multipart/form-data時,它需要額外的信息,稱爲邊界,從而讓它知道分割數據的內容。在這種情況下,邊界需要:---- WebKitFormBoundaryUfDGArtA6R3ZWVoj

我認爲如果您不包括內容類型,這是照顧你。全部內容=類型可能是'multipart/form-data; border = ---- WebKitFormBoundaryUfDGArtA6R3ZWVoj',當它完成所有工作並完成後,必須與構建後的表單數據的內容相匹配。

我認爲FormData會爲你照顧,或者至少讓你把它拉出來並自己設置。

相關問題