#jquery #json
Вопрос:
У меня есть форма, в которой я буду читать все элементы управления и создавать объект Json, она отлично работает, когда у меня есть один набор элементов управления. Теперь в моей форме у меня есть несколько наборов, таких как выбор файла, когда они выбирают файл, я хотел бы добавить Json и объединить его с другим json, чтобы это было похоже
{
firstName: "1",
lastName: "pqr"
},
{ "files" : [ {
FileName: 'xyz.jpg',
data: [object ArrayBuffer],
}]
В настоящее время мой код выглядит следующим образом с двумя отдельными объектами Json
{
firstName: "1",
lastName: "pqr"
}
{
Splash.JPG: [object ArrayBuffer]
}
Вот код, который я хотел бы разработать, чтобы он дал мне желаемый результат
var button = $("button");
var id;
var obj = {};
var divId = $('#myForm');
var fileArray = [];
// handle click and add class
button.on("click", () => {
var map = divId.find('input').map(function() {
//var $item = $(this);
if ($(this).prop('type') === "checkbox" || $(this).prop('type') === "radio") {
id = $(this).attr("name");
obj[id] = $(this).is(':checked');
} else if ($(this).prop('type') !== "button" amp;amp;
$(this).prop('type') !== "file") {
id = $(this).attr("name")
//console.log($item.attr("name"));
return {
id: $(this).val()
}
} else if ($(this).prop('type') == "file") {
var files = $(this)[0].files;
//alert(files);
for (var i = 0; i < files.length; i ) {
// var arr = readTheFile(files[i], getFileInfo, obj);
fileArray.push({
[this.id]: readTheFile(files[0], getFileInfo)
});
return {
fileArray
};
}
}
}).get();
var v = JSON.stringify(map);
alert(v);
});
function getFileInfo(header) {
var obj = {};
$.each(header, function(i, item) {
obj[item.FileName] = item.data;
});
alert(obj);
return obj;
}
function readTheFile(file, callback) {
var ObjArray = [];
var fileReader = new FileReader();
//alert(file);
fileReader.filename = file.name;
fileReader.onload = function(e) {
var bits = e.target.resu<
var Object = {
FileName: e.target.filename,
data: bits
};
ObjArray.push(Object);
callback(ObjArray);
};
fileReader.readAsArrayBuffer(file);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="myForm">
<input id="file-attach" type="file" name="uploadFile[]" multiple="multiple" />
<br><br>
<input type='text' name='firstName' id='firstName' />
<br><br>
<input type='text' name='lastName' id='lastName' />
<br><br>
<button>Submit</button>
</div>
Комментарии:
1. Кое-как обратный вызов не передает данные, он всегда звонит после результата