Bir iframe'e dosya yükleyen bir formum var. Ajax ile geçerli olup olmadığını kontrol edene kadar teslim edilmek istiyorum. Bunu nasıl yapabilirim ? Kodum gönderimi duraklatır ve doğrulama sonucunu döndürür (şu anda 'sonuç': 'true' döndüren bir kukla işlevdir) ancak 'gönder' eylemi gerçekleştirilmez. Ayrıca 200 durumu yanıt aldıktan sonra yanıt verilerinin gösterilmesi normal mi? I aşağıda kod ile http://ntt.vipserv.org/artifact/Doğrulama için form teslimini duraklat
DÜZENLEME
:
<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>
ve bağlantı İşte
benim html var Doğrulama yapabilir, sonuç olumlu olduğunda, form verilir. Şimdi formun hedefini sabitlerseniz, uyarım gösterilmez ve yükleme işleminin gerçekleştirilmediğinden eminim (ne yazık ki yükler listesi her 8 saatte bir yenilenir ve eğer bir süre çalışıp çalışmadığı bilinir). Hedef belirtilmemişse, dosya yeniden yönlendirmeyle yüklenir, böylece tüm 'submit' olay dinleyicisi silinir.<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 kullanarak dosya gönderemezsiniz. – Guffa
@Guffa - evet şunları yapabilirsiniz: http://api.jquery.com/jQuery.post/ –
Aşağıdaki durumum var. Formdan dosya iframe'de uzak bir sunucuya gönderilecektir. Alanların geri kalanı yerel olarak bir nesne örneği oluşturmak için kullanılacaktır. Bu yüzden yerel nesne sadece tüm alanlar uygun şekilde doldurulduğunda oluşturulacaktır. – mastodon