MozTW 討論區
https://forum.moztw.org/

XMLHttpRequest + multipart/form-data = ?
https://forum.moztw.org/viewtopic.php?f=13&t=20373
1 頁 (共 1 頁)

發表人:  GlinX [ 2007-09-17, 23:47 ]
文章主題 :  XMLHttpRequest + multipart/form-data = ?

一般在使用 XMLHttpRequest 做傳送資料時

setRequestHeader() 中 "Content-Type" 的設定通常是 "application/x-www-form-urlencoded"

這時 send() 中傳的參數只要是 "x=....&y=...." 格式就行

但是如果我現在要將一個 enctype="multipart/form-data" 的 form 設定成被 submit 時也用 XMLHttpRequest 傳

請問這時 send() 中的參數要怎麼搞定啊? 囧"

(尤其是該 form 中上傳的東西有檔案在內時)

發表人:  kourge [ 2007-09-18, 13:54 ]
文章主題 : 

如果要像 <input type="file"> 一樣傳送檔案,XMLHttpRequest 並不能做到。
實際上如果要達成像 Ajax 一樣在背景上傳檔案,必須建立一個隱形的 iframe,把表單的所有 element 給 clone 到 iframe 內,再進行 submit 的動作。submit 完以後結果再從 iframe 拉回來。

不過...你有用任何 library 嗎?比如說 Prototype 或 jQuery...
(請告訴我你跳入 Ajax 大海之前有先選一個好的 library...不然下場會很痛苦滴...)
像 jQuery 有 forms plugin,Prototype 有 AJForm,兩者都可以 Ajax 化你的表單。

發表人:  GlinX [ 2007-09-18, 15:48 ]
文章主題 : 

kourge 寫:
如果要像 <input type="file"> 一樣傳送檔案,XMLHttpRequest 並不能做到。
實際上如果要達成像 Ajax 一樣在背景上傳檔案,必須建立一個隱形的 iframe,把表單的所有 element 給 clone 到 iframe 內,再進行 submit 的動作。submit 完以後結果再從 iframe 拉回來。


嗯....那這樣怎麼得知 submit 完成呢?

(就是說相當於在 XMLHttpRequest 裡 ready state=4 的時候)

在那個 iframe 上面加上 onload 事件來偵測嗎?

kourge 寫:
不過...你有用任何 library 嗎?比如說 Prototype 或 jQuery...
(請告訴我你跳入 Ajax 大海之前有先選一個好的 library...不然下場會很痛苦滴...)
像 jQuery 有 forms plugin,Prototype 有 AJForm,兩者都可以 Ajax 化你的表單。


我目前是有試用過 Ext 跟 Prototype 的 Lib 啦....

不過現在我想先從基本開始用起

熟了之後再來用也不遲~XD



謝謝你的回答~ ^^a

發表人:  legnaleurc [ 2007-09-18, 16:06 ]
文章主題 : 

GlinX 寫:
我目前是有試用過 Ext 跟 Prototype 的 Lib 啦....

不過現在我想先從基本開始用起

熟了之後再來用也不遲~XD


做過這種事的我只能說....
你會被玩死....OTZ
IE真的是大魔王

發表人:  GlinX [ 2007-09-18, 20:12 ]
文章主題 : 

legnaleurc 寫:
GlinX 寫:
我目前是有試用過 Ext 跟 Prototype 的 Lib 啦....

不過現在我想先從基本開始用起

熟了之後再來用也不遲~XD


做過這種事的我只能說....
你會被玩死....OTZ
IE真的是大魔王


哈哈哈哈哈哈....的確....Orz

之前光是為了讓已寫好的一堆 JavaScript 檔相容於 IE

改了整整兩天...囧"



不過我覺得

這樣也算是一種學習吧

至少我可以學到 "X! 死 IE 臭 IE 又不支援這個寫法了!" XDD

發表人:  kourge [ 2007-09-22, 12:07 ]
文章主題 : 

GlinX 寫:
嗯....那這樣怎麼得知 submit 完成呢?

(就是說相當於在 XMLHttpRequest 裡 ready state=4 的時候)

在那個 iframe 上面加上 onload 事件來偵測嗎?

首先,iframe 的 src 要設成:
代碼:
javascript:false;document.write("");

然後要用 onload 事件來偵測。

GlinX 寫:
legnaleurc 寫:
GlinX 寫:
我目前是有試用過 Ext 跟 Prototype 的 Lib 啦....

不過現在我想先從基本開始用起

熟了之後再來用也不遲~XD


做過這種事的我只能說....
你會被玩死....OTZ
IE真的是大魔王


哈哈哈哈哈哈....的確....Orz

之前光是為了讓已寫好的一堆 JavaScript 檔相容於 IE

改了整整兩天...囧"



不過我覺得

這樣也算是一種學習吧

至少我可以學到 "X! 死 IE 臭 IE 又不支援這個寫法了!" XDD

另外有一種更好、可以魚與熊掌兼得的方法:
每次在 IE 碰壁,就看看 Prototype / Ext / jQuery 有沒有解決辦法,這樣又可以快速解決問題,又可以快速「學習」,不然簡直是在活活浪費生命。靠 IE 浪費青春...太囧了。

1 頁 (共 1 頁) 所有顯示的時間為 UTC + 8 小時
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/