2014-08-31 56 views
0

我是新來的jQuery/Ajax和我試圖上傳像這樣一個文件:阿賈克斯文件上傳upload.php的不獲取調用

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似乎做了什麼。現在我收到警告「錯誤上傳」,但我仍然認爲upload.php正在被調用,因爲沒有任何內容正在寫入日誌。完成這些更改後註釋掉xhr的內容可以完成上傳。現在問題變成xhr的東西有什麼問題?

+0

日誌是在爲'upload.php'相同的路徑本地存儲的文件。如果我通過輸入正常寫入的URL直接訪問'upload.php'。 – carloabelli 2014-08-31 19:47:26

+0

好吧它是互聯網滯後...將刪除我的評論 – Tushar 2014-08-31 19:59:47

回答

0

'log'是什麼?

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

我敢打賭,如果你看着你的服務器錯誤日誌中的PHP腳本會被發現是在試圖寫「登錄」窒息。

編輯

這裏,似乎正確地顯示瞭如何做你想做什麼了存在的問題。如果你還沒有得到你期望的結果,我仍然會懷疑你的文件路徑有問題。完整的錯誤報告應該澄清問題

update progress bar using ajax request seconds

+0

日誌是一個文件存儲在本地'upload.php'相同的路徑。如果我通過輸入它正常寫入的URL直接訪問'upload.php',所以我不認爲這是事實。 – carloabelli 2014-08-31 19:47:48

+0

你的Apache錯誤日誌說什麼?你的控制檯也沒有顯示任何我錯誤的JS錯誤? – 2014-08-31 19:51:19

+0

控制檯僅顯示警告:不建議使用getUserData()或setUserData()。改爲使用WeakMap或element.dataset。我認爲這不是相關的。 Apache錯誤日誌最後一行是唯一與遠程相關的東西:''/Users/carloabelli/Sites/booth/upload.php''未找到或無法統計,參考:http:// localhost /〜carloabelli/booth/',但可能來自之前我還沒有'upload.php',並且只是測試進度條的創建。 – carloabelli 2014-08-31 19:55:29