2011-02-18 114 views
1

我正在嘗試執行可能無法完成的任務。我還沒有在互聯網上找到相同的場景。使用AJAX和PHP腳本的HTML上傳文件 - 幫助?

我有四個字段,只需點擊一下,就可以調用一個Javascript函數,它執行一個來自PHP文件的數據的AJAX調用。

這些字段最終將填滿數據庫中的一行,PHP將查詢新的一組數據,用戶將看到它。部分數據是用戶可以點擊並展開的圖像。

AJAX調用的工作原理,擴展圖像的工作原理,但通過上傳添加此圖像不會,從而打破了整個事情。

下面是HTML表單的一個片段:

Entry: <input type='text' id='entry' /> 
Stop: <input type='text' id='stop' /> 
Final: <input type='text' id='final' /> 
Chart: <input type='file' id='chart' value='Get Chart'/> 
<input type='button' onclick='addResult()' value='Add' /> 

的addResult()處理這樣的事情:

var entry = document.getElementById('entry').value; 
var stop = document.getElementById('stop').value; 
var final = document.getElementById('final').value; 
var chart = document.getElementById('chart').value; 
var queryString = "?entry=" + entry + "&stop=" + stop + "&final=" + final + "&chart=" + chart + "&loggedIn=true"; 
ajaxRequest.open("GET", "addResult.php" + queryString, true); 

沒什麼特別的,只是把數據並將其發送到addResult.php作爲迴應。下面是在addResult.php處理「圖表」上傳數據的過程:

$chart = $_GET['chart']; 
$chart_loc = "../img/".basename($_FILES[$chart]['name']); 
move_uploaded_file($_FILES[$chart]['tmp_name'], $chart_loc); 
if(($entry != "") && ($stop != "") && ($final != "") && ($chart_loc != "")){ 
      mysql_query("INSERT INTO resultsMod VALUES (now(),'".$entry."','".$stop."','".$final."','".$chart_loc."')") or die(mysql_error()); 
     } 

當我點擊「添加」按鈕,它什麼都不做,之前我添加了上傳文件中的字段,一切工作正常。所以我必須在處理文件時做錯了什麼。

我從來沒有使用上傳數據之前,所以我不知道是否允許發送那樣的數據(沒有表單提交,只是通過JavaScript傳遞文件數據到PHP文件)。 我也可能會用move_uploaded_file函數做一些不正確的事情。

目標當然是要實時更新表單中的新數據,包括上傳的圖像。 (我知道我的代碼很簡單,一旦這個功能有效,我會加入它) 任何幫助表示感謝,謝謝!

+0

我不認爲你可以用GET請求發送文件,請嘗試POST。 – 2011-02-18 15:31:58

回答

1

您正試圖使用​​AJAX上傳文件,這是不可行的。最好的方法是單獨管理文件上傳,也許通過swf-upload

+0

謝謝,我沒有意識到(當然),您無法通過AJAX發送上傳數據。謝謝! – Turner 2011-02-20 21:08:42

1

你不能通過AJAX上傳文件 - 只有解決方案是iframe與表單。

1

通過AJAX上傳文件是不可能的。它不支持XMLHttpRequest。您可以使用閃光燈或使用iframe作爲目標。

1

您的表格是否有enctype="multipart/form-data"?文件上傳必須在<form>標記中具有屬性,才能使上傳正常工作。

同樣,你不檢查服務器上的文件上傳是否成功。在最低限度你應該有

if ($_FILES[$chart]['error'] === UPLOAD_ERR_OK) { 
     ... upload worked, handle it... 
} 
+0

我會加上錯誤檢查,謝謝。 – Turner 2011-02-20 21:06:07

0

東西來檢查,是表單enctype="multipart/form-data"集?這會導致圖像無法上傳。只是一個想法。

此外,是jQuery的選項?如果是這樣,你可以做這樣的事情:

$.ajaxFileUpload({ 
     url:'addResult.php?type=' + queryString, 
     secureuri:false, 
     fileElementId: INPUTIDHERE, 
     dataType: 'json', 
     success: function (data, status) 
     { 
      // done - run some code 
     }, 
     send: function(data) 
     { 
     }, 
     error: function (data, status, e) 
     { 
      console.debug(data); 
     } 
    } 
) 

都需要這個庫: http://jsfiddle.net/SYZqL/

0

請你幫個忙,並使用Uploadify(需要jQuery)。它可以節省您數小時的時間,試圖找出如何讓您的上傳以AJAX-ish的方式工作。

+0

在收到這裏的一些答案後,我正在考慮jQuery。感謝您的回答,我會看看我是否可以使用它 – Turner 2011-02-20 21:06:42

0
you can upload the files via ajax to php script. The following should work for that. 

var file_data = $("#file_field_id").prop("files")[0]; 
var form_data = new FormData(); 
form_data.append("file", file_data) 
form_data.append("user_id", 123) // adding additional form field values 
$.ajax({ 
       url: "server.php", 
       dataType: 'script', 
       cache: false, 
       contentType: false, 
       processData: false, 
       data: form_data,       // Setting the data attribute of ajax with file_data 
       type: 'post', 
       success: function(data, textStatus, jqXHR){ 
        if(data) 
        { 
         // some process 


       }, 
       error:function(jqXHR, textStatus, errorThrown){ 
       alert("errorThrown"); 


     } 
     });