Ajax文件上传upload.php没有被调用

时间:2014-08-31 19:41:37

标签: javascript php ajax

我是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: falseprocessData: false似乎已经做了一些事情。现在我收到警告&#34;错误上传&#34;但是我仍然没有想到upload.php被调用,因为没有写入日志。在进行这些更改后注释掉xhr的内容可以完成上传。现在问题变成了xhr的问题?

1 个答案:

答案 0 :(得分:0)

什么是'日志'?

file_put_contents('log', "LOG\n");

我敢打赌,如果你看一下你的网络服务器错误日志,就会发现PHP脚本在试图写入'log'时会感到窒息。

修改

这是一个现有的问题,似乎正确显示了如何做你想做的事情。如果你还没有得到你期望的结果,我仍然怀疑你的文件路径有问题。完整的错误报告应该澄清问题

update progress bar using ajax request seconds