【问题标题】:Pass an image through AJAX [duplicate]通过AJAX传递图像[重复]
【发布时间】:2014-10-19 17:02:49
【问题描述】:

基本上我想在提交表单时使用 ajax 传递图像文件并检索图像并通过电子邮件将其作为附件发送:

这是表格

<form role="form" action="" name="devis" id="devis" method="post" enctype="multipart/form-data" class="form-horizontal">
    <fieldset>
        <div class="form-group">
            <label class="control-label col-md-4" for="societe">Company</label>
            <div class="col-md-8">
                <input type="text" class="form-control input-md col-md-8" name="societe" value="" maxlength="" id="societe">
            </div>
        </div>
        <div class="form-group">
            <label class="control-label col-md-4" for="message"><span class="required">* </span>Message</label>
            <div class="col-md-8">
                <textarea rows="5" name="message" class="form-control input-md col-md-8" maxlength="" required="" style="resize:none;" id="message"></textarea>
            </div>
        </div>
        <div class="form-group" id="input_file">
            <label class="control-label col-md-4" for="image_input_field">Logo</label>
            <div class="col-md-8">
            <div class="input-group uploaddiv">
                <span class="input-group-btn">
                    <span class="btn btn-default btn-file">
                        Parcourir <input type="file" id="image_input_field" name="file">
                    </span>
                </span>
                <input type="text" class="form-control" readonly="">
            </div>
            </div>
        </div>
    <div class="form-group">
    <div class="form-actions col-md-9 col-md-offset-3 text-right">
        <input type="submit" value="Envoyer" name="" class="btn btn-primary" id="submit">
        <input type="reset" value="Annuler" name="" class="btn btn-default" id="reset">
        </div>
    </div>
    </fieldset>
</form>

我似乎无法在我的代码中找到什么错误!这是 AJAX 调用

jQuery(document).on("click", "#submit", function(e) {
      e.preventDefault();
      var fileInput = document.getElementById('image_input_field');
      var file = fileInput.files[0];
      var formData = new FormData();
      formData.append('file', file);
      // console.log(file);

      var societe = $("input#societe").val();
      var message = $("textarea#message").val();
      jQuery.ajax({
        url: "ajax.php",
        type: "post",
        data: {
           'file': file,
           'module' : 'ajax_data_form',
           'societe': societe,
           'message': message
        },
        cache: false,

        success: function(reponse) {
          if(reponse) {
            alert(reponse);
            // console.log(reponse);
            // jQuery('#devis').trigger("reset");
          } else {
            alert('Erreur');
          }
        }
      });
     });

这是 ajax.php

<?php
if( isset($_POST['module']) && $_POST['module'] == "ajax_data_form" )
{
     var_dump($_FILES);
}

【问题讨论】:

标签: javascript php jquery ajax file-upload


【解决方案1】:
$.ajax({
    type: "POST",
    url: pathname,
    data: new FormData($('#devis')[0]),
    processData: false,
    contentType: false,
    success: function (data) {
        $("#divider").html(data);
    }
});

$_FILES[];中正常获取文件数据

【讨论】:

  • 最好能解释一下这将如何解决问题
【解决方案2】:

你可以试试吗

<script type="text/javascript">
$(document).ready(function() {
$("#submit").click(function() {
  var fileInput = document.getElementById('image_input_field');
  var file = fileInput.files[0];
  var formData = new FormData();
  formData.append('file', file);
  // console.log(file);

  var societe = $("input#societe").val();
  var message = $("textarea#message").val();

      $.ajax({
        url: "ajax.php",
        type: "POST",
        data: "file="+file,
        cache: false,

        success: function(reponse) {
          if(reponse) {
            alert(reponse);

            // console.log(reponse);
            // $('#devis').trigger("reset");
          } else {
            alert('Erreur');
          }
        }
      });
 }); });
</script>

在 ajax.php 中

随便写

 echo 'something';

【讨论】:

  • 我们无法通过 ajax 处理文件。
  • 每个人都说你不能通过 ajax 处理文件...我总是将文件转换为 base64 字符串并通过 ajax 调用发送。在服务器端,您接收字符串并将其写入磁盘。可以做到,而且很简单。
【解决方案3】:

您可能已经知道,通过 ajax 调用处理文件上传是不可能的,一旦 HTML5 FILE I/O Api 准备好并被主流浏览器实现,这将成为可能。

您可以使用 jQuery iframe 发布表单插件在 iframe 中发布数据,因此用户体验将类似于 ajax 调用(页面的部分更新)。

这里是链接: https://github.com/dogzworld/iframe-post-form

描述:“这个 jQuery ajax 上传插件创建一个隐藏的 iframe 并设置表单的 target 属性以发布到该 iframe。当表单提交时,它被发布(包括文件上传)到隐藏的 iframe。最后,插件从 iframe 收集服务器的响应。”

如前所述,您可以从服务器发送响应并相应地在您的网页上显示更新。 必须有一个演示页面,但它现在无法正常工作。

你也可以用它来上传文件。

调用示例:

jQuery('#frmId').iframePostForm({
    json : true,
    post : function () {
        //return true or false
        return true;
    },
    complete : function (response) {
        //complete event
        console.log(response);
    }
});

【讨论】:

    【解决方案4】:

    使用一个名为 Jquery 表单插件的 Jquery 插件Link

    我建议使用 jquery 简单地提交表单,您想要的任何数据都可以保存在隐藏字段中。

    $("#devis").ajaxSubmit(options); 
    return false;
    

    您可以像这样在php页面中轻松获取文件

    $ImageTempname  = $_FILES['ImageFile']['tmp_name'];
    $ImageFilename  = $_FILES['ImageFile']['name'];
    $ImageType      = $_FILES['ImageFile']['type'];
    

    等等……

    【讨论】:

    • 你忘了说ajaxSubmit是一个jQuery插件
    • 是的,我也觉得可以用ajaxSubmit。 :)
    猜你喜欢
    • 2019-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-05
    • 1970-01-01
    • 1970-01-01
    • 2016-03-29
    相关资源
    最近更新 更多