Массив через POST (Ajax) - PullRequest
       6

Массив через POST (Ajax)

0 голосов
/ 14 июня 2019

Хорошо, похоже, это самая прямолинейная вещь, но я действительно понятия не имею, почему он это делает, и не нахожу кого-либо еще с этой проблемой.

Вот моя проблема, я отправляю запрос POSTвот так;

  $.ajax({
      type: "POST",
      url: '/user/sell',
      data: data,
      success: function(data) {
        console.log('Call was successful');
      }
    });

В объекте данных есть массив с именем items.Когда я регистрирую объект данных, все нормально, как и должно быть, однако когда я регистрирую объект данных в моей экспресс-функции, массив items меняется на items[] без причины ..

NodeJS

'items[]': '15716345'

JS (Браузер)

items: [15716345]

Есть идеи, что здесь происходит?

Ниже приведена полная версия кода. Весь блок (внешний интерфейс) // Проверка адреса if ($ ('. Block.payment .wrapper input: eq (0)'). Val ()! == $ ('. Block.payment .wrapperinput: eq (1) '). val ()) {return error (' Поля не совпадают ');}

// Get known data
var type = $('.body.inventory .methods .method.selected').data('type'),
    items = [];

var data = {
  type,
  address: $('.block.payment .wrapper input:eq(0)').val()
}

if(type === 'steam'){
  var app = $('.body.inventory .sub-methods .method.selected').data('app');
  data['app'] = app;

  $('.body.inventory .item[data-app="'+app+'"].selected').each(function(){
    items.push($(this).data('id'));
  });
}else{
  $('.body.inventory .item[data-type="'+type+'"].selected').each(function(){
    items.push($(this).data('id'));
  });
}

data['items'] = items;

// Execute route or smt
$.ajax({
  type: "POST",
  url: '/user/sell',
  data: data,
  success: function(data) {
    console.log('Call was successful');
  }
});

Backend

router.post('/sell', function(req, res, next) {
  try {
    console.log(req.body);
    res.send({
      success: 1
    });
  } catch(e) {
    if(e) console.log(e);

    res.send({
      success: 0,
      error: e
    });
  }
});

Ответы [ 2 ]

1 голос
/ 14 июня 2019

Установить JSON промежуточное программное обеспечение анализатора тела для запросов к вашему приложению expressJS.

const bodyParser = require('body-parser');

app.use(bodyParser.json())

А в запросе AJAX сделать contentType равным application/json, а непо умолчанию application/x-www-form-urlencoded; charset=UTF-8'.

$.ajax({
  contentType: 'application/json',
  type: "POST",
  url: '/user/sell',
  data: data,
  success: function(data) {
    console.log('Call was successful');
  }
});
0 голосов
/ 14 июня 2019

Предположим, что это ваш список массивов, который вы хотите POST.

object[] Obj = new object[1];
Obj [0] = "value1"
Obj [1] = "Value2"
Obj [3] = {"CollectionValue1, CollectionValue2"}

$.ajax({
  url: '../Controller/MethodName',
  type: 'post',
  datatype: 'json',
  async: false,
  contentType: "application/json; charset=utf-8",
  data: JSON.stringify({ ControllerParameterName: Obj }), <!-- Obj is your Array -->
  success: function (data) {
    alert(data.Response);
  }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...