簡體   English   中英

如何通過ajax請求將字符串和文件一起發送到php文件?

[英]How to send a string along with file via ajax request to a php file?

我得到了一個php文件,該文件將文件保存到服務器到名為“上載”的文件夾中,它通過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;
}
?>

使用.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

還要在這里也進行一些詳細說明:

您可以使用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"];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM