【问题标题】:How to send image file from local machine to server using jquery ajax request如何使用 jquery ajax 请求将图像文件从本地机器发送到服务器
【发布时间】:2017-12-17 18:37:11
【问题描述】:

我有一个输入类型 = 文件的 html 表单,我有一个指向 API 的链接,用于将图像存储到云中。在此功能中,用户可以从他的本地计算机上传文件并将其上传到服务器。服务器返回上传图片的云地址。在邮递员中它工作正常,但是当与 jquery 一起使用时,我无法弄清楚如何做到这一点。在 postman 中设置了几个参数,例如文件名、标签和员工 ID。在文件名字段中有选择文件按钮和表单数据单选按钮。

到目前为止,这是我的 jquery 代码

$("#test-btn").on("click", function() {
$.ajax({
  url: 'myURL/external/upload',
  type: 'POST',
  headers: {
    "appID": "some value",
    "version": "some value",
    "empID": "some value",
    "contentType": "application/x-www-form-urlencoded"
  },
  data: new FormData($("#test-form")),
  processData: false,
  contentType: false,
  success: function() {
    console.log(data)
  },
  error: function(e) {
    console.log(e)
  }
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form enctype="multipart/form-data" method="post" name="upload-image" id="test-form">
  <input type="file" name="filename" />
  <input type="text" name="tag" value="some value" />
  <input type="text" name="empID" value="some value" />
</form>
<button id="test-btn">make</button>

我已将机密字段替换为虚拟值。

【问题讨论】:

  • 尝试从标题中删除"contentType" : "application/x-www-form-urlencoded"这一行
  • 控制台有错误吗?
  • 使用data : new FormData($("#test-form")[0])data : new FormData(document.getElementById('test-form'))
  • 控制台说:数据未定义。删除内容类型无效。在邮递员中,我们有一个包含键值对的主体参数。在第一个字段中有一个键:文件名和值:选择文件

标签: javascript jquery html ajax


【解决方案1】:
$("form#test-form").submit(function(){

    var formData = new FormData(this);

    $.ajax({
        url : 'myURL/external/upload',
        type : 'POST',
        data: formData,
        async: false,
        // your other config, params
        success : function(){console.log(data)},
        error : function(e){console.log(e)}
    });

    return false;
});

或者你可以试试:

<form enctype="multipart/form-data" method="post" name="upload-image" id="test-form" action="myURL/external/upload">
  <input type="file" name="filename" />
  <input type="text" name="tag" value="some value" />
  <input type="text" name="empID" value="some value" />
</form>
<button id="test-btn">make</button>

$("form#test-form").submit(function() {
    var formData = new FormData($(this)[0]);
    $.post($(this).attr("action"), formData, function() {
        // success    
    });
    return false;
});

【讨论】:

  • success : function(){console.log(data)} 仍然 data 未定义!
  • 您是否检查过服务器端的请求是否已被处理?
猜你喜欢
  • 2017-02-14
  • 2019-04-19
  • 2012-01-03
  • 1970-01-01
  • 2011-08-25
  • 2014-03-22
  • 2015-05-26
  • 2012-11-08
  • 2019-11-28
相关资源
最近更新 更多