2016-04-21 2 views
1

Im пытается отправить массив на мой сервер Node/MongoDB через запрос AJAX POST. Тело также содержит другие переменные. Вот код клиента сторона JS:Отправка массива в тело POST

function setupForm(){ 
    $("#add").submit(function(event) { 
     event.preventDefault(); 
     var name = $("#name").val(); 
     var logo = $("#logo").val(); 
     var phone = $("#phone").val(); 
     var email = $("#email").val(); 
     var address = $("#address").val(); 
     var postcode = $("#postcode").val(); 
     var openingHours = $("#openingHours").val(); 
     var loc = [44, 44]; 

     $.ajax({ 
      type: "POST", 
      url: "http://localhost:3000/services", 
      data: "name=" + name + "&logo=" + logo + "&phone=" + phone + "&email=" + email + "&address=" + address + "&postcode="+ postcode +"&openingHours=" + openingHours + "&loc=" + loc, 
      success: function(){alert('success');} 
     }); 
    }); 
} 

А вот код на стороне сервера:

exports.addWine = function(req, res) { 
    var wine = req.body; 
    console.log('Adding wine: ' + JSON.stringify(wine)); 
    db.collection('services', function(err, collection) { 
     collection.insert(wine, {safe:true}, function(err, result) { 
      if (err) { 
       res.send({'error':'An error has occurred'}); 
      } else { 
       console.log('Success: ' + JSON.stringify(result[0])); 
       res.send(result[0]); 
      } 
     }); 
    }); 
} 

Он добавляет его в базу данных, но в этом формате. Я хотел бы его в массив:

"postcode" : "ugh", 
"openingHours" : "fhgfh", 
"loc" : "44,44" 
+0

Используйте функцию serialize() jQuery. –

ответ

1

Учитывая данные, которые вы используете, я бы посоветовал отправить данные в тело запросов POST. Благодаря JSON это сохранит типы данных (массив, bools и т. Д.).

$.post("http://localhost:3000/services", { 
     name: $("#name").val(), 
     loc: [44, 44] 
     ...etc 
    }, function(){alert('success');} 
); 

Бэкэнд должен работать нормально без изменений. Возможно, вам понадобится добавить body-parser в ваш стек промежуточного программного обеспечения. Средство промежуточного анализа body-parser преобразует тело в объект javascript, который вы можете нажать прямо в свою базу данных.

2

Как указано, используйте serializeArray(). Чтобы добавить дополнительный параметр, просто добавьте его в массив, как показано ниже.

function setupForm(){ 
    $("#add").submit(function(event) { 
     event.preventDefault(); 

     var data = $(this).serializeArray(); 
      // add extra parameters (don't forget brackets) 
      data.push({ name: 'loc[]', value: 44 }); 
      data.push({ name: 'loc[]', value: 44 }); 

     $.ajax({ 
      type: "POST", 
      url: "http://localhost:3000/services", 
      data: data, 
      success: function() { 
       alert('success'); 
      } 
     }); 
    }); 
} 

Если вы хотите продолжать использовать ваш метод просто строит строку запроса, вы должны добавить &loc[]=44&loc[]=44, но лучше в долгосрочной перспективе просто использовать один из функций сериализации.

+0

Это не добавляет объект в БД при использовании линий .push. Есть идеи? – spogebob92

+0

Обновите свой вопрос с помощью схемы для своей коллекции. Вы можете попробовать использовать свой исходный код со следующим [ответом] (http://stackoverflow.com/a/27853834/1022914), чтобы достичь того, чего вы хотите. Это, в основном, расщепление строки '44,44', чтобы оно стало массивом' [44,44] 'перед тем, как вы вставляете новый документ на стороне сервера. – Mikey

Смежные вопросы