我有一些表單,它在iframe中上傳文件。我想保留它的提交,直到我將檢查它是否與ajax一致。我怎樣才能做到這一點 ?我的代碼暫停提交併返回驗證結果(目前只是一個虛函數,返回'result':'true'),但是'submit'操作沒有執行。在獲得響應200狀態之後,顯示響應數據需要2秒鐘是否正常?暫停表單提交驗證
這裏是我的html:
<div id="message" style="background:black; width:400px; height:80px; display:none; color:white;">
</div>
<h1>Submit</h1>
<form action="{{upload_url}}" target="upload_target" method="POST" id="file_upload_form" enctype="multipart/form-data">
{% render_upload_data upload_data %}
<table>{{ form }}</table>
<p>
<input type="hidden" maxlength="64" name="myfileid" value="{{ myfileid }}" >
</p>
<p>
<input type="submit" id="file_upload_submit" value="Submit" />
</p>
<iframe id="upload_target" name="upload_target" src="" style="width:0;height:0;border:0px solid #fff;"></iframe>
</form>
JS:
$(function() {
$('#file_upload_submit').click(function(e){
e.preventDefault();
var fileUploadForm = document.getElementById('file_upload_form');
$.ajax({
type: "POST",
url: '/artifact/upload/check-form/',
data: 'foo=bar',
dataType: "json",
success: function(data){
if(data['result'] == "true"){
$("#message").show();
$("#message").fadeIn(400).html('<span>'+data["message"]+'</span>');
setTimeout(function(){
$("#message").fadeOut("slow", function() {
$("#message").hide();
});
}, 1500);
$('#file_upload_form').attr('target','upload_target').submit(function(){
alert('Handler for .submit() called.');
return false;
});
}
else{
$("#message").show();
$("#message").fadeIn(400).html('<span">'+data["message"]+'</span>');
setTimeout(function(){
$("#message").fadeOut("slow", function() {
$("#message").hide();
});
}, 1500);
return false;
}
}
});
return false;
});
});
</script>
和鏈接: http://ntt.vipserv.org/artifact/
編輯
下面我的代碼能夠執行驗證,然後當結果是正面表單提交時。現在,如果我硬編碼表單的目標,我的警報不顯示,我敢肯定,上傳不執行(不幸的是,上傳的清單每8小時刷新一次,我會知道它是否在一段時間內工作)。如果未指定目標,則文件將通過重定向進行上傳,以便省略整個「提交」事件偵聽器。
<script>
$('#fake_upload_submit').click(function(e){
e.preventDefault();
var fileUploadForm = document.getElementById('file_upload_form');
fileUploadForm.addEventListener("submit", function() {
alert("sent in iframe");
fileUploadForm.target = 'upload_target';
}, false);
$.ajax({
type: "POST",
url: '/artifact/upload/check-form/',
data: 'foo=bar',
dataType: "json",
success: function(data){
if(data['result'] == "true"){
$("#message").show();
$("#message").fadeIn(400).html('<span>'+data["message"]+'</span>');
setTimeout(function(){
$("#message").fadeOut("slow", function() {
$("#message").hide();
});
}, 1500);
fileUploadForm.submit();
}
else{
$("#message").show();
$("#message").fadeIn(400).html('<span">Response false</span>');
setTimeout(function(){
$("#message").fadeOut("slow", function() {
$("#message").hide();
});
}, 1500);
return false;
}
}
});
return false;
});
</script>
HTML:
<div id="message" style="background:black; width:400px; height:80px; display:none; color:white;">
</div>
<h1>Submit</h1>
<form action="{{upload_url}}" method="POST" target="" id="file_upload_form" enctype="multipart/form-data">
{% render_upload_data upload_data %}
<table>{{ form }}</table>
<p>
<input type="hidden" maxlength="64" name="myfileid" value="{{ myfileid }}" >
</p>
<p>
<input type="submit" style="display:none" id="true_upload_submit" value="Submit" />
</p>
<iframe id="upload_target" name="upload_target" src="" style="width:0;height:0;border:0px solid #fff;"></iframe>
</form>
<p>
<input type="submit" id="fake_upload_submit" value="Submit" />
</p>
您無法使用AJAX發佈文件。 – Guffa 2010-11-17 15:05:24
@Guffa - 是的,您可以:http://api.jquery.com/jQuery.post/ – 2010-11-17 15:07:37
我有以下情況。來自表單的文件將被提交給iframe中的遠程服務器。其餘的字段將用於本地創建對象的實例。所以只有當所有的字段都被正確填充時纔會創建本地對象。 – mastodon 2010-11-17 15:09:20