当前位置: 首页 > 面试题库 >

输入类型=文件不能与$ .ajax一起使用?

张丁雷
2023-03-14
问题内容

<s:file>在生成HTML的表单中有一个标记<input type="file">。当我通过表单提交(例如,提交按钮等)提交表单时,在操作方法中一切正常。但是,当我将代码更改为:

$.ajax({
    url: "actionClass!actionMethodA.action",
    type: "POST",
    error: function(XMLHttpRequest, textStatus, errorThrown) {
                alert('Error ' + textStatus);
                alert(errorThrown);
                alert(XMLHttpRequest.responseText);
            },
    data: $(form).serialize(),
    success: function(data) {
                ...
            }
});

在后端,该file字段始终为null

在操作类中,文件字段的定义如下(使用setter和getter):

private File impFileUrl;

是因为现在表单已序列化,所以无法在后端正确设置文件字段了吗?


问题答案:

这是因为jQuery.serialize()仅序列化输入元素,而不序列化其中的数据。

仅“成功控件”被序列化到字符串。由于没有使用按钮提交表单,因此没有序列化提交按钮值。为了使表单元素的值包含在序列化的字符串中,该元素必须具有name属性。仅选中复选框和单选按钮(“
radio”或“ checkbox”类型的输入)中的值时,才会包括在内。 来自文件选择元素的数据未序列化。

但这并不意味着您不能使用ajax上传文件。其他功能或插件可能用于发送FormData对象。

FormData如果您设置了正确的选项,则也可以与jQuery一起使用:

var fd = new FormData(document.querySelector("form"));
fd.append("CustomField", "This is some extra data");
$.ajax({
  url: "actionClass!actionMethodA.action",
  type: "POST",
  data: fd,
  processData: false,  // tell jQuery not to process the data
  contentType: false   // tell jQuery not to set contentType
});


 类似资料:
  • 问题内容: 如何在fileinputstream中输入要发送的文件? 我在Fileinputstream中输入了url,但是URL的输出是错误的,因为链接斜杠像-从/到\一样向后翻转,而双斜杠//只能是一个斜杠和一个反斜杠。要执行fileinputstream吗?如果不是,您能告诉我应该使用什么代替fileinputstream吗? 问题答案: 如果您要获取从URL检索数据的,则使用方法将返回,可

  • 我的一个文件被“标记为文本”,图标在变。实际上,这是一个PHP文件。我试过去< code >求助- 我错过了什么?我如何才能恢复PHP突出显示?

  • 问题内容: 解决的更新: 经过所有这些工作,我发现我正在更新ajax中调用代码的旧版本。“ boardControl.php”而不是“ boardUpdate.php”这些是使编程变得有趣的错误类型。 我正在写一个浏览器gomoku游戏。我有ajax声明,允许播放器演奏一曲。 值=木板面积位置 出价=木板ID 在创建用于标识玩家身份的用户登录名之前,服务器端php有一个临时解决方案。单击时会旋转方

  • 问题内容: 有人可以向我解释为什么在这个简单示例中我无法获得当前选择的单选按钮。我正在尝试使用ng-repeat指令动态生成单选按钮,并使用ng- model获取当前选择的单选按钮。像这样: 模板: 控制器: 问题答案: 因为当它在放置指令的位置重复模板时,确实会在每次迭代中创建一个新的子范围(通常是继承的)。 那么当创建一个新的原型继承的子范围时会发生什么呢? 在子作用域中,它包含所有属性,其中

  • 我试图调用直接将一个项目添加到初始的中,如下所示,其中是我编写的PowerShell类(下面的示例使用类名: 但是,这会产生一个错误,提示它找不到此构造函数的重载: 找不到“列表`1”和参数计数“1”的重载。 虽然这样做有效,但我不确定为什么我不能使用我的PowerShell类作为类型。我的理解是,只有上下文绑定类型和(默认情况下)嵌套类型不能与泛型一起使用,但以下显示我的类不是: 我不确定Pow

  • 问题内容: Whenver我有一个角表达式作为值的,它不会工作: 数字值将转换为字符串,并且复选框根本无法使用。 http://jsfiddle.net/punund/NRRj7/3/ 问题答案: 您不能动态更改输入的类型,因为IE不允许这样做,并且AngularJS需要跨浏览器兼容。因此,即使您可能会看到更改后的类型显示在源代码中,AngularJS也不会接受它- 类型仅被评估一次,并且无法更改