Сериализовать тип файла jQuery
Я пытаюсь выполнить сериализацию данных формы, включая поле изображения файла, используя jquery.form.js jQuery API.
API помогает мне обрабатывать поля данных, включая изображение и возвращать объект изображения как [object file]
Вот мой код для сериализации
var data = $js("form[name=ajx_imgupload]").formSerialize();
var img = $js("#upload_image").fieldSerialize();
$js.ajax({
url: "index.php?option=com_obituary&task=upload",
type: "POST",
dataType:"json",
data: data,
beforeSend: function(){
$js(".loadingblock").show();
},
complete: function(){
$js(".loadingblock").hide();
},
success: function(res){
alert();
},
error: function(jqXHR, textStatus, errorThrown){
alert(textStatus);
}
});
Застрял с проблемой... Помощь будет очень оценена.
Спасибо
Ответы
Ответ 1
Позвольте мне помочь вам. Я сделал это всего 1 день назад. У меня есть форма, включая поле изображения. когда вы отправляете его своим загружаемым изображением через jquery.form.js
Примечание. Я загружаю файл с jqueryimageupload.php, если хотите, я могу вставить его. Это простая загрузка файла php. http://www.w3schools.com/php/php_file_upload.asp
html часть:
<form name="imageform" id="imageform" action="jqueryimageupload.php" method="post">
<input type="file" name="resim" id="img" onchange="ImageUpload()" />
<input type="hidden" name="action" value="imageup" />
</form>
JQuery
function ImageUpload() {
$("#return").show();
$("#return").html('');
$("#return").html('<img src="images/load2.gif" alt="Uploading...."/> wait, uploading...');
$("#imageform").ajaxForm({
target: '#return',
success: function() {
$("#return").fadeOut(10000);
}
}).submit();
}
в последней форме submit:
$('#form').submit(function() {
var img=$('#image').val();
var forms=($(this).serialize());
$.ajax({
type:"POST",
url: "do.php?do=upload",
data:forms+'&r='+encodeURIComponent(img),
success: function(result){ //your code }
});
});
Ответ 2
Вы можете использовать этот способ (от http://portfolio.planetjon.ca/2014/01/26/submit-file-input-via-ajax-jquery-easy-way/)
$( '#my-form' )
.submit( function( e ) {
$.ajax( {
url: 'http://host.com/action/',
type: 'POST',
data: new FormData( this ),
processData: false,
contentType: false
} );
} );
это более гибкий и простой способ
Ответ 3
HTML
<!--Add Inventory Form-->
<div id="addInventoryFormHTML" class style="display:none">
<!--Form-->
<form id="addInventoryForm" novalidate="novalidate" enctype="multipart/form-data">
<input id="itemTitleField" class="textField addInventoryField" name="itemTitleField" type="text" placeholder="Item Title"/>
<textarea id="itemDescriptionField" class="textAreaField addInventoryField" name="itemDescriptionField" type="textarea" placeholder="Item Description"></textarea>
<input id="itemPictureField" class="uploadField addInventoryField" name="itemPictureField" type="file"/>
</form>
<!--Errors-->
<div id="inventoryAddErrors"></div>
</div>
Javascript (обратите внимание, что любые методы, следующие за мной, являются методами экземпляра, я использую Joose)
$(form).ajaxSubmit({//note that form is just the form built with a jQuery selector
url: self.returnBaseULR() + '/ajaxadd',
type: 'POST',
error: function(xhr, status, error) {
console.log('Unable to contact the server');
},
success: function(response){
var jsObjectFromResponse = JSON.parse(response);
if(jsObjectFromResponse.success){
self.cLog('Item uploaded successfully!');
document.location.reload();
} else {
self.cLog('Listing failed, see AJAX response');
}
}
});
Вы не можете загружать изображения, используя только собственные методы jQuery. Проверьте http://jquery.malsup.com/form/
У него есть методы, которые сделают это для вас идеально.
Это просто работает для меня. На обратной стороне я могу захватить параметры POST с помощью $_POST и файлов с $_FILES (или что-то в этом роде)
Похоже, ajaxSubmit мгновенно отправляет форму с сериализованными данными, выполненными автоматически.
Надеюсь, что это поможет.
Ответ 4
Вы не можете использовать ajax для загрузки файлов. Чтобы имитировать эффект, вы можете иметь форму в скрытом iframe и отправить / .submit()
на URL-адрес загрузки.
Более или менее нравится этот.