如何通过ajax请求将字符串与文件一起发送到php文件?

时间:2014-05-08 07:47:47

标签: javascript php jquery ajax

我有一个php文件,将文件保存到服务器到一个名为upload的文件夹,它通过ajax请求接收文件,所有工作正常到目前为止,下一个要求是发送一个字符串和文件,以指定一个上传文件夹&子文件夹,如"课程/数学"怎么实现呢?

JS

$( document ).ready(function() {
$('#Upload').click(function(){
    var formData = new FormData($('form')[0]);
    $.ajax({
        url: 'uploadFile.php',  
        type: 'POST',
        xhr: function() {  
            var myXhr = $.ajaxSettings.xhr();
            if(myXhr.upload){ 
                myXhr.upload.addEventListener('progress',progressHandling, false);
            }
            return myXhr;
        },
        success: completeHandler,
        data: formData,
        cache: false,
        contentType: false,
        processData: false
    });
});

var progressHandling = function(e){
    if(e.lengthComputable){
        var percent = Math.round((e.loaded / e.total) * 100);
        $('#uploadprogress').css('width', percent+'%');
    }
}

var completeHandler = function(data){
    $('#message').text(data);
    $('#uploadprogress').css('width', '0%');
    $('#file').val('');
};
});     

PHP

<?php
if ($_FILES["file"]["error"] > 0) {

} else {
  move_uploaded_file($_FILES["file"]["tmp_name"],
      "upload/" . $_FILES["file"]["name"]);
  echo true;
}
?>

2 个答案:

答案 0 :(得分:3)

使用 .serialize()

在ajax调用中发送表单数据的示例示例
var formData = $('#myform').serialize;
    $.ajax({
        url: 'uploadFile.php',  
        type: 'POST',
        xhr: function() {  
            var myXhr = $.ajaxSettings.xhr();
            if(myXhr.upload){ 
                myXhr.upload.addEventListener('progress',progressHandling, false);
            }
            return myXhr;
        },
        success: completeHandler,
        data: formData,
        cache: false,
        contentType: false,
        processData: false
    });

如果你想添加一个字符串,只需使用如下:

var value = 'test';
var formData = $('#myform').serialize+"&newstring="+value;

更新

通过ajax文件上传是而不是。 您可以使用IFrameAjaxFileUpload插件上传文件,而无需刷新页面。

此处的详细信息为Answer

此处还提供一些详细说明:

答案 1 :(得分:0)

您可以使用HTML5上传元素。

$("#FileUpload").change(function (e) {
 var uploadFile = e.target.files;
 if (uploadFile.length > 0) {
      if (window.FormData !== undefined) {
           var data = new FormData();
           for (var x = 0; x < uploadFile.length; x++) {
                data.append("file" + x, uploadFile[x]);
           }
           data.append("ELEMENTCLASSNAME", $("#ELEMENTID").val());
           $.ajax({
                type: "POST",
                url: 'URL',
                contentType: false,
                processData: false,
                data: data,
                success: function (result) {
                     alert(result);
                },
                failure: function (result) {
                     alert(result);
                },
                error: function (xhr, status, p3, p4) {
                     var err = "Error " + " " + status + " " + p3 + " " + p4;
                     if (xhr.responseText && xhr.responseText[0] == "{")
                          err = JSON.parse(xhr.responseText).Message;
                     console.log(err);
                }
           });
      } else {
           alert("This browser doesn't support HTML5 file uploads!");
      }
 }});

在服务器端使用Request Object获取值:

              var versionName = Request["ELEMENTCLASSNAME"];