使用Ajax将图像传递给PHP

时间:2014-06-27 07:27:57

标签: php ajax file-upload

我正在尝试将图像和标题字段值传递给PHP,我通常使用$ _FILES数组直接使用PHP处理文件上传,我不知道如何使用ajax创建/传递此数组到PHP。 我的表格:

<form role="form" name="updateProductForm" id="updateProductForm" method="POST" enctype="multipart/form-data"> 
    <input name="imgOne" id="imgOne" type="file" title="Add Image">
    <a class="btn btn-primary" name="updateProduct" id="updateProduct">Update Product</a></div>
</form>

我正在尝试使用它传递给PHP:

$('#updateProduct').on('click', function() {
    try {
        ajaxRequest = new XMLHttpRequest();
    } catch (e) {
        try {
            ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            try {
                ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e) {
                alert("Your browser broke!");
                return false;
            }
        }   
    }
    ajaxRequest.open("POST", "../Controller/ProductController.php", true);
    ajaxRequest.setRequestHeader("Content-type","application/x-www-form-urlencoded");
    ajaxRequest.send("title=" + $("#title").val() + "&imgOne=" + $("#imgOne"));

    // Create a function that will receive data sent from the server
    ajaxRequest.onreadystatechange = function(){
        if(ajaxRequest.readyState == 4){
            console.log(ajaxRequest);
        }
    }

});

在PHP中,我正在尝试这个:

if (isset($_POST["edit"])) {
    $id = $_POST["edit"];
    $imgName = $_FILES["file"]["imgName"];
}

优素福

3 个答案:

答案 0 :(得分:3)

我在我的一个项目中做到了这一点,以下代码适用于我。 请根据需要对代码进行必要的修改。

我的表单按钮:

 <form name="upload_img" enctype="multipart/form-data" id="upload_img">
<input type="file" style="display:none" id="upload-image" name="upload-image"></input>
<button id="upload_image" type="button">Save</button>
</form>

我的JQuery / Ajax:

$('#upload_image').click(function()
{
    var form = new FormData(document.getElementById('upload_img'));
    //append files
    var file = document.getElementById('upload-image').files[0];
    if (file) {   
        form.append('upload-image', file);
    }
    $.ajax({
        type: "POST",
        url: "URL",
        data: form,             
        cache: false,
        contentType: false, //must, tell jQuery not to process the data
        processData: false,
        //data: $("#upload_img").serialize(),
        success: function(data)
        {
            if(data == 1)
                $('#img_msg').html("Image Uploaded Successfully");
            else
                $('#img_msg').html("Error While Image Uploading");
        }
    });
    //alert('names');


});

答案 1 :(得分:0)

您可以使用jQuery文件上传插件

$('#imgOne').change(function(){ 

  $.ajaxFileUpload({

        fileElementId: 'imgOne',
        url: "../Controller/ProductController.php",

        dataType: 'json',

        success: function(response)
        {
         //Success Code Here
        },

        error: function()
        {
           //Error Code Here
        }
  });
});

答案 2 :(得分:0)

  1. 首先您需要通过以下html代码行

    选择图像文件
    input type="file" id="image_to_upload"
  2. 之后,您需要编写以下jQuery代码来捕获此事件。

    
        jQuery.noConflict();    
        formdata = new FormData();      
        jQuery("#image_to_upload").on("change", function() {
            var file = this.files[0];
            if (formdata) {
                formdata.append("image", file);
                jQuery.ajax({
                    url: "destination_ajax_file.php",
                    type: "POST",
                    data: formdata,
                    processData: false,
                    contentType: false,
                    success:function(){}
                });
            }                       
        }); 
    
    
  3. 在目标ajax文件中,您可以通过以下变量访问图像

    print_r($_FILES);