【问题标题】:PhoneGap File Upload Using jQuery Ajax使用 jQuery Ajax 上传 PhoneGap 文件
【发布时间】:2013-04-26 04:43:04
【问题描述】:

我使用 PhoneGap 开发移动应用程序,并想问是否有一种方法可以使用 jQuery 的 ajax 将文件上传到服务器 (php)。 我使用 ajax 是因为我想避免从网页重定向(当然,我想重定向到我自己的页面)。 所以,这是我的一些代码:

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

我在下面尝试了这些组合,但没有任何效果。有什么想法吗?

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

【问题讨论】:

  • 使用 FormData 正如您在对 Matt's Answer 的评论中所写的那样为我做到了。 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);谢谢你

标签: jquery cordova file-upload


【解决方案1】:

您可能必须使用 PhoneGap 的 FileTransfer 类。

文档和一些示例代码在这里:http://docs.phonegap.com/en/2.0.0/cordova_file_file.md.html#FileTransfer

【讨论】:

  • 我同意,你必须使用PhoneGap的FileTransfer API。
  • 我想下次我会尽量清楚地提出我的问题。我已经知道 FileTransfer,但我想要的是在部署应用程序之前上传到 Web 浏览器上进行测试。但我已经解决了。我需要的是: var fd = new FormData(document.getElementById("Id"));和 $.ajax({data: fd});
【解决方案2】:
<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>

【讨论】:

    【解决方案3】:

    您不能轻松地使用 AJAX 调用上传文件。

    您可以对它进行基础编码或以不同的方式传输它,但有很多file upload plugins for jQuery 可以帮助您。

    【讨论】:

      猜你喜欢
      • 2013-07-30
      • 2013-08-28
      • 1970-01-01
      • 2018-06-24
      • 2012-04-25
      • 2015-09-12
      • 2015-03-23
      • 1970-01-01
      相关资源
      最近更新 更多