Серверная часть, я использую функцию ниже (используется как промежуточное ПО espressjs)
function objCreation(req, res, next){
req.form.complete(function(err, fields, files){
if (err) {
next(err);
} else {
// Set params in request
obj = {};
obj.label = fields.label;
// Check if picture is provided
if(files.image){
// Move file to correct dir
var fs = require("fs");
var folder = '/var/images/';
var src = files.image.path;
var filename = files.image.name;
var target = folder + filename;
obj.filename = filename;
req.obj = obj;
fs.rename(src, target, function (status) {
next();
});
} else {
obj.filename = 'nofile';
req.obj = obj;
next();
}
}
});
}
По сути, он получает поля отправленной формы. Эта функция использует модуль "connect-form" node.js.
Клиентская сторона, я использую вводимый текст:
<input id="new_obj" type="text" placeholder="New"/>
и обратный вызов срабатывает при достижении возврата на этот вход:
// Add callback for object creation
$('#new_obj').keypress(function(e){
if (e.which == 13){
createObj();
}
});
Функция createObj является следующей:
function createObj(){
$.ajax({
url: "/object/create/",
type: "POST",
data: { label : "label" },
success: function(obj) {
console.log(obj);
},
error: function(jqXHR,status,errorThrown) {
alert(jqXHR.responseText + '-' + status + '-' + errorThrown);
}
});
}
Мне не удается, чтобы эта последняя часть отправляла форму в правильном формате, поэтому она обрабатывается методом сервера. Я не хочу менять сторону сервера, поскольку она уже используется некоторыми другими клиентами (форма отправки клиента iOS с ASIFormDataRequest).
В настоящее время я смотрю на плагин ajaxForm jQuery, чтобы посмотреть, может ли это помочь.