2012-09-05 145 views
2

我使用PhoneGap開發移動應用程序,並想詢問是否有方法使用jQuery的ajax將文件上傳到服務器(php)。 我使用ajax,因爲我想避免從網頁重定向(當然,我想重定向到我自己的網頁)。 所以,這裏是我的一些代碼:使用jQuery Ajax PhoneGap文件上傳

$.ajax({ 
    url: url, 
    data: $("#myform").serialize(), 
    type: "post", 
    dataType: "json" 
}); 

,我已經嘗試了以下這些組合但沒有任何工程。任何想法 ?

contentType: false 
cache: false 
processData: false 
contentType: "multipart/form-data" 
+0

使用FORMDATA你在馬特的答案的評論中寫道爲我做。 'var data = new FormData(formElement),oReq = new XMLHttpRequest(); oReq.open(「POST」,'/ fileUpload',true); oReq.onload = function(oEvent){ var response; if(oReq.status == 200){* success */ } else { /* failure */ } }; oReq.send(data);' Thanx you –

回答

1

您可能必須使用PhoneGap的FileTransfer類。

文檔和一些示例代碼是在這裏:http://docs.phonegap.com/en/2.0.0/cordova_file_file.md.html#FileTransfer

+0

我同意,你將不得不使用PhoneGap的FileTransfer API。 –

+1

我想我會盡量在下次清楚地說出我的問題。我已經知道FileTransfer,但我想要的是在部署應用程序之前,先在Web瀏覽器上進行測試。但我解決了它。我需要的是:var fd = new FormData(document.getElementById(「Id」));和$ .ajax({data:fd}); – Win

0

您無法輕鬆上傳使用AJAX調用的文件。

你可以對它進行基地編碼或以不同的方式運輸,但有很多file upload plugins for jQuery可以幫助你。

1
<script> 
$(document).ready(function(){ 
$('#button').click(function(){ 
    var formData = new FormData($('form')[0]); 
    alert(formData) 
    $.ajax({ 
     url: '/testupload2/', //server script to process data 
     type: 'POST', 
     xhr: function() { // custom xhr 
      myXhr = $.ajaxSettings.xhr(); 
      if(myXhr.upload){ // check if upload property exists 
      myXhr.upload.addEventListener('progress',progressHandlingFunction, false); // for handling the progress of the upload 
      } 
      return myXhr; 
     }, 
     //Ajax events 

     success: function(data){ 
      alert('Done') 
     }, 
     error: function(jqXHR, textStatus, errorThrown){ 
      alert("Some Error!") 
     }, 
     // Form data 
     data: formData, 
     //Options to tell JQuery not to process data or worry about content-type 
     cache: false, 
     contentType: false, 
     processData: false 
    }); 
}); 

function progressHandlingFunction(e){ 
    if(e.lengthComputable){ 
     $('progress').attr({value:e.loaded,max:e.total}); 
    } 
} 
</script> 

HTML正文部分:

<body> 
<form enctype="multipart/form-data"> 
<input name="file" type="file" /> 
<input type="button" id ="button" value="Upload" /> 
</form> 
<progress> 
    progressHandlingFunction() 
</progress> 
</body>