传递具有各种类型的对象作为AJAX帖子请求?

时间:2018-02-08 23:26:32

标签: javascript php jquery ajax laravel

在我的页面上,我有一个input用户填写。

然后,在我的JS中,我有一个对象,就像这样:

var obj = {
    sort: 'newest',
    num: 10,
    values: [1, 2, 3, 4]
};

如您所见,该对象包含各种类型(字符串,整数和数组)。我需要将input值和对象的数据传递给Laravel,并使用原始类型(即字符串,整数,数组)发布请求

但目前,所有数据都以字符串形式传递:

https://i.stack.imgur.com/y6NGU.png

这是我目前的代码:

$('form').on('submit', function (event)
{
    event.preventDefault();

    var form = $(this);

    var data = form.serializeArray();

    $.each(obj, function (key, val)
    {
        data.push({ name: key, value: val });
    });

    $.ajax({
        url: 'https://website.com/save',
        type: 'post',
        data: data,
        dataType: 'json',
        success: function (data)
        {
            //
        }
    });
});

我应该更改什么才能将数据作为各自的类型传递?

2 个答案:

答案 0 :(得分:0)

你必须改变如下的jQuery代码:

var obj = {
  sort: 'newest',
  num: 10,
  values: [1, 2, 3, 4]
};

$.ajax({
  url: 'https://example.com/save',
  type: 'post',
  data: $.param(obj), //will become e.g. sort='newest'&num=10&etc..
  contentType: "application/x-www-form-urlencoded; charset=UTF-8", // this is the default value, so it's optional
  dataType: 'json',
  success: function (data)
  {
    //
  }
});

答案 1 :(得分:0)

正如@Ivar在评论中所提到的,将您的数据按编码发送并在服务器中解码。

因此您需要将JS更改为

$('form').on('submit', function (event) {
    event.preventDefault();

    var formdata = new FormData();
    formdata.append('form', $(this).serialize());
    formdata.append('obj', JSON.stringify(obj));

    $.ajaxSetup({
        headers: {
            'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
        }
    });

    $.ajax({
        url: 'https://website.com/save',
        type: 'POST',
        data: formdata,
        processData: false,
        contentType: false,
        success: function (data)
        {
            //
        }
    });

});

并且在您的控制器方法中,您可以将值解码为

public function yourMethod(Request $request)
{
    // You could access the form variables in $output array
    parse_str($request->form, $output);

    // Decode the obj variable
    $obj = json_decode($request->obj, TRUE);
}