Gizli bir iFrame aracılığıyla dosyaları karşıya yüklerken IE'de bazı sorunlar yaşıyorum. Aslında dosya yükleme gayet iyi çalışıyor ancak jQuery kodumun başarı diyaloğunu göstermesi ve linke bir tablo eklememesi ateş etmiyor. IE geliştirici araçlarını kullanarak SCRIPT70'i keşfettim: İzin reddedildi hata mesajı. Bu, Chrome'da iyi çalışıyor, dolayısıyla sorunun IE'de ne olduğuna dair bir kayıp yaşıyorum. IE10 kullanıyorum bahsetmeliyim, bu yüzden sorunun IE'nin önceki sürümlerinde de olduğunu hayal ediyorum.SCRIPT70: İzin reddedildi IE'de iFrame'e erişme
Temelde, eski tarayıcıları desteklememiz gerektiğinden, saklı bir iFrame kullanarak Ajax dosya yüklemesini benzetmeye çalışıyorum. IFrame başarılı bir şekilde yanıt verdiğinde, okuduğum ve ayrıştırdığı JSON'u içeren bir div vardır. JSON'un verileri, kullanıcıya dosya yükleme durumunu da belirten bir mesajı görüntülemek ve tabloya bir satır ekleyerek sayfaya bağlantı eklemek için kullanılır. Ancak IE'de chechUploadResponse işlevi bile ateşleme gibi görünmüyor.
JavaScript:
$(document).ready(function()
{
$('#btnPrint').click(openPrintTimesheetWindow);
$('#date').change(postback);
$('#employee').change(postback);
$('#client').change(postback);
$('#btnUpload').click(uploadFile);
$("#uploadFrame").on("load", function() {
$('#uploadFrame').contents().find('#userFile').change(uploadFileChanged);
checkUploadResponse();
});
});
function postback()
{
$('#timesheetPrintFilter').submit();
}
function uploadFileChanged()
{
$('#ajaxBusy').show();
$('#uploadFrame').contents().find('#uploadForm').submit();
}
function uploadFile()
{
var employeeId = $('#init_employee').val();
var periodDate = $('#init_periodEndDate').val();
$('#uploadFrame').contents().find('#employeeId').val(employeeId);
$('#uploadFrame').contents().find('#periodEndDate').val(periodDate);
$('#uploadFrame').contents().find('#userFile').click();
}
function checkUploadResponse()
{
var response = $('#uploadFrame').contents().find('#uploadResponse').text();
if (response != null && response != '')
{
var response = jQuery.parseJSON(response);
if (response.status == "ERROR")
{
$("#dialog").html(response.message);
$("#dialog").dialog({ buttons: { "OK": function() { $(this).dialog("close");}}, title: "Error" });
}
else
{
$("#dialog").html(response.message);
$("#dialog").dialog({ buttons: { "OK": function() { $(this).dialog("close");}}, title: "Success" });
var url = response.url;
var tsaid = response.tsaid;
var name = response.name;
var row = '<tr id="tsaid-' + tsaid + '">' +
'<td width="80%" valign="top" align="left">' +
'<a href="' + url + '">' + name + '</a>' +
'</td>' +
'</tr>';
$("#tsAttachment").append(row);
}
}
$('#ajaxBusy').hide();
}
Gizli iFrame: Burada
<form id="uploadForm" name="uploadForm" action="timesheet-upload.php" method="POST" enctype="multipart/form-data">
<input type="hidden" name="MAX_FILE_SIZE" value="3145728" />
<input type="hidden" name="employeeId" id="employeeId" value="" />
<input type="hidden" name="periodEndDate" id="periodEndDate" value="" />
<input type="file" name="userFile" id="userFile" />
</form>
Bu yazı biraz eski
<div id="uploadResponse">{"status":"SUCCESS","message":"Timesheet successfully uploaded","url":"uploads\/2013\/Aug\/1-49cd1c0217abf676505b349ec88bb5a42b1d5631e41232f08be3b0dced9f65e2.pdf","name":"How To Write A Cover Letter.pdf","tsaid":15}</div>
<form id="uploadForm" name="uploadForm" action="timesheet-upload.php" method="POST" enctype="multipart/form-data">
<input type="hidden" name="MAX_FILE_SIZE" value="3145728" />
<input type="hidden" name="employeeId" id="employeeId" value="" />
<input type="hidden" name="periodEndDate" id="periodEndDate" value="" />
<input type="file" name="userFile" id="userFile" />
</form>
bu jQuery hata olmuş olabilir. JQuery-1.9.1 için jQuery-1.10.2 sürümüne yükselttim ve bu sorunun benim için çözüleceği görünüyordu. İlgilendiğim herkes için jQuery web sitesinde bunu bildirdim. Umarım bu, benzer sorunları olan herkese yardımcı olur. http://bugs.jquery.com/ticket/13936 – greyfox