我是jQuery / Ajax的新手,我正在尝试上传这样的文件:
var fd = new FormData();
fd.append('file', file);
$.ajax({
xhr: function() {
var xhrobj = $.ajaxSettings.xhr();
if (xhrobj.upload) {
xhrobj.upload.addEventListener('progress', function(e) {
var percent = 0;
if (e.lengthComputable) {
percent = Math.floor(e.loaded / e.total * 100);
}
progressDiv.find('progress').val(percent);
progressDiv.find('b').html(percent + '%');
});
}
},
type: 'POST',
url: 'upload.php',
data: fd,
success: function(data) {
progressDiv.find('progress').val(100);
progressDiv.find('b').html('100%');
alert(data);
},
error: function() {
alert('Error uploading!');
}
});
我的upload.php
文件如下所示:
<?php
file_put_contents('log.txt', "LOG\n");
file_put_contents('log.txt', implode(', ', $_FILES) . "\n", FILE_APPEND);
$target = 'upload/' . basename($_FILES['file']['name']);
if (move_uploaded_file($_FILES['file']['tmp_name'], $target)) {
file_put_contents('log.txt', "SUCCESS\n", FILE_APPEND);
} else {
file_put_contents('log.txt', "FAILURE\n", FILE_APPEND);
}
?>
问题是进度条保持为0并且始终显示无警报。也没有任何内容写入log
文件,这意味着upload.php
甚至没有被调用。
我做错了什么?
修改
经过一段时间的搜索,我偶然发现了这个漂亮的小问题:Submitting a file with jQuery.ajax gives TypeError
因此添加contentType: false
和processData: false
似乎已经做了一些事情。现在我收到警告&#34;错误上传&#34;但是我仍然没有想到upload.php
被调用,因为没有写入日志。在进行这些更改后注释掉xhr的内容可以完成上传。现在问题变成了xhr的问题?
答案 0 :(得分:0)
什么是'日志'?
file_put_contents('log', "LOG\n");
我敢打赌,如果你看一下你的网络服务器错误日志,就会发现PHP脚本在试图写入'log'时会感到窒息。
修改
这是一个现有的问题,似乎正确显示了如何做你想做的事情。如果你还没有得到你期望的结果,我仍然怀疑你的文件路径有问题。完整的错误报告应该澄清问题