不使用AJAX,你會失去很多的必需品的這種形式。
通過使用AJAX,你可以:1。 阻止彈出 2.添加額外的頭 3.有一個事件
沒有Ajax的表單提交動作有去的地方,不管是彈出窗口還是相同窗口。您的帖子回覆將決定瀏覽器中顯示的內容。
所以,你可以通過發送回包含所需行動的另一個網頁照顧在服務器端的問題1和3。
問題2,您可以發送視爲使用GET方法而不是POST方法的查詢字符串,但他們不會是頭,您可以使用隱藏的表單字段,但是這是低於在大多數情況下可取的。另外,使用表單中的所有內容都會隨數據包一起發送到服務器,並且可以讀取,但不會再出現在標題中。
我建議只使用AJAX來解決你的問題,因爲它的異步和自定義的特性,這似乎是一個非常適合你的問題。
編輯: 正如你所問的iframe的功能,這裏的格式信息:
<form id="fileAPITesting" action="startStopResume.aspx" method="POST" target="upload_target" enctype="multipart/form-data" encoding="multipart/form-data">
<input type="file" id="fileInput" name="fileInput" />
<button id="submit" type="submit" >Submit</button>
</form>
<iframe id="upload_target" name="upload_target" src="#" style="display:none;"></iframe>
這將自動重定向功能後的iframe中。然後,您可以添加一些代碼(在這裏我使用jQuery簡化),以防止這一點,並使用AJAX:
<script type="text/javascript">
$('#fileAPITesting').bind('submit', function(e){
e.preventDefault();
fileProcessing(document.getElementById('fileInput'));
});
setStatusArea();
</script>
這裏,jQuery的表格插件變得很方便。另外值得注意的是,如果您鏈接到Google代碼庫中的jQuery,您很可能不會爲頁面添加開銷,因爲許多其他頁面使用jQuery,並且它將位於用戶的緩存中。這裏是一個鏈接到該頁面:
http://plugins.jquery.com/project/form
我已經與我的形式等要求衆多,但這裏是我的後臺頁面的樣本:
function fileProcessing(fileToProcess){
// grab file information only allows 1 file at a time
// In IE have to grab differently
if(window.File){
file = fileToProcess.files[0];
clearForm(false);
if (file){
fileLength = file.size;
fileName = file.name;
totalBLObs = Math.ceil((fileLength/BYTES_PER_CHUNK));
initialInformation();
$('#stop').toggle();
hideButtons();
$('#pause').toggle();
fileSending();
}else{
statusField('No file selected');
}
}else{
// without a the file API we have to submit the entire form to an iframe
file = fileToProcess;
clearForm(false);
fileAPI = false;
time = new Date();
if(file.value){
// IE cannot get a proper handle on the information
hideButtons();
fileName = file.value;
fileName = fileName.substr(fileName.lastIndexOf('\\') + 1);
statusField('<br />The File API is not implemented.' +
'<br />Attempting alternate method with only start & stop status' +
'<br />Started at: ' + time.toLocaleTimeString());
$('#fileAPITesting').ajaxSubmit({
beforeSubmit: function(a,f,o) {
o.dataType = 'string';
try{
$('#uploadOutput').html('<img src="images/loaderb64.gif"' +
'alt="loading" /><br />Submitting...');
$('#uploadOutput').show();
}catch(e){
statusField('<br />Submitting...');
}
},
success: function(data) {
if (typeof data == 'object' && data.nodeType)
data = elementToString(data.documentElement, true);
else if (typeof data == 'object')
data = objToString(data);
time = new Date();
statusField('<br />'+ data + ' at ' + time.toLocaleTimeString());
try{
$('#progress').hide();
$('#progress').html('');
}catch(e){
// #progress doesn't exist
}
}
});
}else{
statusField('No file selected');
}
}
};
希望啓動你失望正確的道路。
嗨,詹姆斯,謝謝你的回答!是的,我真的很喜歡使用ajax!但在這種情況下,我的問題是更大,我想:因爲,如何從文件輸入字段「捕捉」文件並通過Ajax發送?在其他情況下,我使用新的FormData() - 對象,但在這裏我不知道如何把文件放在那裏? .. –
@ ho.s如果你不必支持IE,那麼File API就是頂尖的。但是,爲了與IE向後兼容,您必須通過iframe實現人造AJAX。以下是File API的兩個很好的資源: http://www.html5rocks.com/en/tutorials/file/dndfiles/ --- http://www.sitepoint.com/html5-file-drag-drop -read-analyze-upload-progress-bars/ – James
非常感謝..我在之前找到這些鏈接,並且已經使用它們將文件拖放到一個框中,然後創建FormData-Object :-)工作正常,但正如您猜測的那樣,我必須支持IE 7+和Opera,爲此我需要一個替代表單。你能描述一下你的意思嗎?「通過iframe的AJAX」?我從來沒有使用過這種「技術」。THX –