0
이 상황에 머물러 있습니다 :
아약스를 사용하여 여러 입력란과 이미지를 업로드합니다. 이미지는 FileReader API를 사용하여 base64 문자열로 인코딩됩니다. 인코딩 된 이미지를 보내는 것 외에는 모든 것이 작동하는 것 같습니다.아약스 요청의 양식 데이터가 불완전합니다
내 코드 (간체) :
var groups = {},
objects = {};
objects["name"] = {},
objects["group"] = {};
objects["image"] = {};
var objectCount = $(".layout-object").length;
$(".layout-object").each(function(i,v) {
var k = objectCount-i;
objects["name"][i] = $(v).val();
objects["group"][i] = $("#set-object-dropdown-"+k).val();
// get an image
var file = document.getElementById('image-'+k).files[0];
var reader = new FileReader();
reader.onload = function(event) {
objects["image"][i] = event.target.result; // get image in base64
};
reader.readAsDataURL(file);
});
$(".layout-group").each(function(i,v) {
groups[i] = $(v).val();
});
// prepare object for ajax request...
var data = {
name: $("#name").val(),
groups: groups,
objects: objects
};
// console log shows all data correctly in place = in objects there is a propery "image"...
console.log(data);
// sending ajax POST request
var posting = $.post(location.href, { data: data });
posting.done(function(response){
console.log(response);
});
문제 :없는 아약스 요청 양식 데이터 속성 "이미지"에,하지만 데이터가 올바른지와 객체를 게시하기 전에.
아마도 readAsDataURL
함수와 그 onload
이벤트에 문제가 있습니까? 이 같은
'readAsDataURL'은 아약스처럼 비동기 적이므로 결과를 즉시 사용할 수 없습니다. 또한이 작업 대신 파일을 업로드하려면 [FormData] (https://developer.mozilla.org/en-US/docs/Web/API/FormData) 개체를 사용하십시오. – Musa
@Musa +1은 formdata를 참조합니다. 그것은 정말로가는 길입니다. – Mouser
독자의 AJAX 호출이 onload에서 시작되어야합니다. – Mouser