我正在创建一个自定义指令,通过iframe将文件上传到我的服务器。该指令使用jQuery Form Plugin(https://github.com/malsup/form)并直接应用于<input type="file">
元素:
angular.module('myModule').directive('myUpload', function() {
replace: false,
restrict: 'A',
link: function (scope, element, attrs) {
url = attrs.url
// Wrap my file input element in a form
// that will be submitted when user selects a file.
element.wrap('<form method="POST"></form>');
// Save reference to the form
form = element.closest('form');
// Bind to change event of the file input field
element.bind('change', function() {
form.ajaxSubmit({
url: '/my-endpoint',
iframe: true,
type: 'POST',
error: function() { ... },
success: function() { ... }
});
});
}
});
我的HTML看起来像:
<form name="parentForm"> <!-- This is not the form submitted by ajaxSubmit -->
<input type="text" name="someUnrelatedInput">
<input type="text" name="anotherUnrelatedInput">
<input type="file" name="myFile" my-upload>
</form>
现在,在除IE之外的所有浏览器中,此代码按预期工作。在IE 8 + 9中,发送了POST
请求,但它不包含用户选择的文件。
有谁知道为什么会这样,以及如何解决这个问题?