我想将文件上载到服务器而不刷新页面。上传工作,但上传完成后,页面重新加载,这是不是我想要的。我正在重定向到一个iframe(“myFrame”)来停止页面重新加载,但它似乎无法正常工作。我做错了什么?需要修复文件上传后停止页面重新加载
HTML
<form id="upload" target="myFrame" action="sql/main-pix-upload.php" method="post" enctype="multipart/form-data">
<input id="main-pix" class="hidden" name="main_pix" type="file" onchange="uploadPix()" accept="image/*"/>
<label class="gi gi-camera mb-0 text-white" for="main-pix" type="button" title="Change Picture"></label>
</form>
<iframe class="hidden" name="myFrame"></iframe>
SCRIPT
function uploadPix(){
var form = document.getElementById('upload');
form.onsubmit = function(e){
e.preventDefault()
var formData = new FormData(this);
$.ajax({
url: 'sql/main-pix-upload.php',
type: 'POST',
data: formData,
async: false,
cache: false,
contentType: false,
processData: false
})
});
};
PHP
$account = $_SESSION['account'];
$order = $_SESSION['order'];
$id = $_SESSION['id'];
$pathPix = ('../accounts/'.$account.'/'.$order.'/pix/'.$id.'/');
if(!is_dir($pathPix)){
mkdir($pathPix, 0777, true);
}
$file_name = $_FILES['main_pix']['name'];
$file_size = $_FILES['main_pix']['size'];
$extension = pathinfo($file_name, PATHINFO_EXTENSION);
$new_name = "main-pix.png";
$temp = ($_FILES["main_pix"]["tmp_name"]);
$target_file = ($pathPix.$new_name);
if(0 < $_FILES['main_pix']['error']){
echo 'Error: ' . $_FILES['main_pix']['error'] . '<br>';
}else{
move_uploaded_file($temp, $target_file);
}
'onchange =“uploadPix()”'不要使用内联JS。当搜索函数初始化文件时,你不应该在HTML中查找它(视图)。改为使用'addEventListener'。如果你真的想在HTML中留下一些提示,说明某些元素绑定了某些JS的东西,而不是你可以使用'data-onchange =“uploadPix”',并且在JS中你可以将所有''[data-onchange] “'元素并检索指定的函数名称,如'myOnchangeMethods [this.dataset.onchange]()' –
我把它拿出来,尝试了一切,但它没有工作。 – ninjachuku