@Eugene70

Как грамотно обработать ajax request?

Здравствуйте.
Делаю ajax crud и столкнулся с проблемой получения данных форм через post.
<form class="edit-parser-form" id="edit-parser-form" method="POST" >
    <meta name="csrf-token" content="{{ csrf_token() }}">
    <input type="hidden" name="parser_id" id="parser_id">
                            
    <div class="form-group">
        <input type="text" name="url" class="form-control url" id="url" placeholder="URL инстаграм страницы">
    </div>
    <div class="form-group">
        <input type="checkbox" id="is_active" name="is_active"> Активность
    </div>
    <div class="form-group">
        <input type="checkbox" id="publish" name="publish"> Публиковать?
    </div>
</form>

Ajax
$('#update-btn').on('click', function (e) {
            e.preventDefault();
            var input = $('#edit-parser-form').serializeArray();
            var parserId = $('#parser_id').val();
            var route = '{{ route('parsers.store') }}';
            //
            $.ajax({
                type: 'POST',
                url: route,
                dataType: 'json',
                data: {
                    input: input
                },
                success: function (data) {
                    $('#exampleModal').modal('hide');
                },
                error: function (data) {
                    console.log('Ошибки:', data);
                }
            });
        });

Контроллер
public function store(Request $request)
{
    dd($request->input('input')[1]['value']); //получается получить значение поля таким кривым способом
    if($request->ajax()){
        $parserId  = array('id' => $request->parser_id);
        $parserData = array(
            'url' => $request->url),
            'is_active' => $request->is_active, // но не могу понять почему не работает этот.
            'publish' => $request->publish
        );
        dd($parserData);

        Parser::updateOrCreate($parserId, $parserData);

        return response()->json('success', 'Успешная операция над парсером');
    }
}

dd $request->all()
array:1 [
  "input" => array:3 [
    0 => array:2 [
      "name" => "parser_id"
      "value" => "2"
    ]
    1 => array:2 [
      "name" => "url"
      "value" => "govnonapalke.com"
    ]
    2 => array:2 [
      "name" => "is_active"
      "value" => "on"
    ]
  ]
]
  • Вопрос задан
  • 93 просмотра
Решения вопроса 1
Alex_Wells
@Alex_Wells
PHP/Kotlin
Ну как отправил, так и получил. Причем тут laravel? Выкидывайте нахрен это: serializeArray

Вообще не используйте jquery ни для чего, кроме манипуляции dom'а. В т.ч. и для ajax запросов. Возьмите axios, а данные вытягивайте вручную:

axios
    .post('your/url', {
        parser_id: $('#parser_id').val(),
        is_active: $('#is_active').val(),
        publish: $('#publish').val(),
    })
    .then(data => {
        $('#exampleModal').modal('hide');
    })
    .catch(data => {
        console.log('Ошибки:', data);
    });
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы