我必须处理一个任意文件,不一定与模型有关。所以,假设我希望完全控制它发送的表单和数据。我在控制器中有一个“手动构建”的表单:
the_form = FORM(INPUT(_type='file', _name='image'),
INPUT(_type='text', _name='sometext'),
_action=URL('controller', 'upload_test'),
_method='post')
在视图中,我会正常显示表单,让我们说{{= the_form}} 然后,通过使用简单的jQuery,我尝试通过Ajax提交表单。
但是,我遇到了以下问题:
为什么文件不能通过常规request.vars或request.post_vars进入服务器端?任何帮助是极大的赞赏。谢谢。
答案 0 :(得分:0)
我自己设法解决了这个问题。如果我可以这么说,那么"技巧就是通过不同地序列化表单数据,以适当的方式将数据发送到服务器。以下是对此的简要说明:
(function($) {
$.fn.serializefiles = function() {
var obj = $(this);
var formData = new FormData();
var params = $(obj).serializeArray();
$.each($(obj).find("input[type='file']"), function(i, tag) {
$.each($(tag)[0].files, function(i, file) {
formData.append(tag.name, file);
});
});
$.each(params, function (i, val) {
formData.append(val.name, val.value);
});
return formData;
};
})(jQuery);
var form_request_data = $("form").serializefiles();
var ajaxParams = {
type: "POST",
url : target_url,
data : form_request_data,
cache: false,
contentType: false,
processData: false,
async : true
};
$.ajax(ajaxParams).done( function(request_result) {
...
}