Ajax отправка JSON

Как отправить Ajax’ом список объектов (List) в JSON формате

Пример 1

$(document).ready(function () {
   $('body').on('click', 'button[name="AddProduct"]', function () {
      var product = JSON.stringify({
          'Name': $('textarea[name="productName"]').val(),
          'Cost': $('input[name="productCost"]').val(),
      });
 
      console.log(product);
      
      $.ajax({
           url: "/Products/AjaxCreate/",
           method: "POST",
           contentType: 'application/json',
           data: product,
           success: function (response) {
		 
                 console.log(response);
	   
           }
      });
   });
});

Контроллер

public ActionResult AjaxCreate(Product product){
     return Json(new { result = "success" }, JsonRequestBehavior.AllowGet);
}

 

Пример 2

//Сохранение накладной
$('body').on('click', 'button[name="SaveInvoiceBill"]', function () {
//Соберем таблицу как массив объектов
var billDetails = [];
$('.item').each(function () {
   var name = $(this).find('.name').val();  //Название
   var quantity = parseInt($(this).find('.quantity').val()); //Количество
   var price = parseFloat($(this).find('.price').val());//Цена
   var summ = parseFloat($(this).find('.item-summ').attr('value'));//Сумма
   var productId = parseFloat($(this).find('.item-id').attr('value'));//Id Товара
   var productSkuId = parseInt($(this).find('.item-sku-id').attr('value'));//Id Торгового предложения Товара
   var notRec = $(this).find('.item-not-rec').prop('checked');//Учитывать товар или нет
 
 billDetails.push({ Name: name,
                    Quantity: quantity,
                    Price: price,
                    Summ: summ,
                    ProductId: productId,
                    ProductSkuId: productSkuId,
                    NotRec: notRec });
 });
 console.log(billDetails);
 billDetails = JSON.stringify({ 'billDetails': billDetails }); //Превратим в Стетхема
 
 //Отправим  на сохранение
 $.ajax({
	url: "/Bills/AjaxSaveInvoiceBill/",
	method: "POST",
	contentType: 'application/json',
	data: billDetails,
	success: function (response) {
		window.location.replace("/Bills/List/");
	}
 });

return false;
});

Контроллер

[HttpPost]

public ActionResult AjaxSaveInvoiceBill(List<BillDetail> billDetails){

   if (billDetails.Count == 0) return Json(new { result = "error", message = "В накладной нет товаров" }, JsonRequestBehavior.AllowGet);
   //Создадим новую приходную накладную, получим ее ID
   long billId = Bill.CreateBill(BillTypes.Invoice);
   //Теперь сохраним каждую позицию под ID новой накладной
   BillDetail.SaveBillDetails(billDetails, billId);
   return Json(new { result="success", message="Накладная успешно создана" }, JsonRequestBehavior.AllowGet);

}

Ajax запрос в контроллер и получение Json ответа

 

$(document).ready(function () {
	
   $.ajax({
      url: "/Suppliers/AjaxGetSuppliersList/",
      method: "GET",
      success: function (response) {
          data = JSON.stringify(response.suppliers);
          var list = eval("(" + data + ")");
          suggest_count = list.length;
          if (suggest_count > 0) {
              $('.supplier-select').empty();//Очистим список элементов
              //полученный список элементов добавим в селект
              $.each(response.suppliers, function (key, value) {
                        $('.supplier-select').append('<option value="' + value.Id + '">' + value.Name + '</option>');
              });
          }
      }
   });
});

Контроллер

[HttpGet]
public ActionResult AjaxGetSuppliersList()
{
	List suppliers = Supplier.GetSuppliers();
	return Json(new { suppliers }, JsonRequestBehavior.AllowGet);
}