Laravel Dynami c Форма ввода текста и загрузки файла - PullRequest
1 голос
/ 12 марта 2020

У меня проблема, когда я добавляю input type="file" в динамическую c вставку формы, все работает до того, как я пытался добавить input type="file" также, у меня нет сообщения об ошибке в браузере

addMore.blade . php

<form name="add_name" id="add_name" enctype="multipart/form-data">
<input type="text" name="name[]" placeholder="Enter your Name" class="form-control name_list" />
<input type="file" name="proposal[]" id="proposal" class="form-control name_list" />

<button type="button" name="add" id="add" class="btn btn-success">Add More</button> //add dynamically input
<input type="button" name="submit" id="submit" class="btn btn-info" value="Submit" /> 
</form>

здесь ajax

$('#submit').click(function(){             
           $.ajax({  
                url:postURL,  
                method:"POST",  
                data:$('#add_name').serialize(),
                type:'json',
                success:function(data)  
                {
                    if(data.error){
                        printErrorMsg(data.error);
                    }else{
                        i=1;
                        $('.dynamic-added').remove();
                        $('#add_name')[0].reset();
                        $(".print-success-msg").find("ul").html('');
                        $(".print-success-msg").css('display','block');
                        $(".print-error-msg").css('display','none');
                        $(".print-success-msg").find("ul").append('<li>Record Inserted Successfully.</li>');
                        // location.href = "http://www.example.com/ThankYou.html"
                    }
                }  
           });  
      }); 
//note the dynamic add input filed button already works #add
//already tried remove serialize() still not work
//also i got no error message on the browser

здесь HomeController. php

public function addMorePost(Request $request){
    $name = $request->name;
    $proposal = $request->file('proposal')->store('proposals');   //already change to ->file(proposal[]) not work

    for ($count = 0; $count < count($name); $count++) {
                $data = array(
                    'name' => $name[$count],
                    'proposal' => $proposal[$count]     //already change 'proposal[]' but not work
                );
                TagList::create($data);
    }
    return response()->json(['success' => 'done']);
}

1 Ответ

0 голосов
/ 12 марта 2020

вы используете сериализацию при отправке данных через ajax, вам нужно передать FormData с ajax.

Ниже приведен полный код для отправки файла с ajax, а также вы можете вызвать событие когда форма отправлена, чтобы вы могли получить полные данные формы:

<form name="add_name" id="add_name" enctype="multipart/form-data" action="home" method="post">
    @csrf
    <input type="text" name="name[]" placeholder="Enter your Name" class="form-control name_list" />
    <input type="file" name="proposal[]" id="proposal" class="form-control name_list" />

    <button type="button" name="add" id="add" class="btn btn-success">Add More</button>
    <input type="submit" name="submit" id="submit" class="btn btn-info" value="Submit" />
</form>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<script type="text/javascript">
    $('#add_name').submit(function(e) {
        e.preventDefault();
        var form = $(this);
        var formData = new FormData(this);
        $.ajax({
            url: form.attr('action'),
            method: "POST",
            data: formData,
            type: 'json',
            processData: false,
            contentType: false,
            success: function(data) {
                if (data.error) {
                    printErrorMsg(data.error);
                } else {
                    i = 1;
                    $('.dynamic-added').remove();
                    $('#add_name')[0].reset();
                    $(".print-success-msg").find("ul").html('');
                    $(".print-success-msg").css('display', 'block');
                    $(".print-error-msg").css('display', 'none');
                    $(".print-success-msg").find("ul").append('<li>Record Inserted Successfully.</li>');
                    // location.href = "http://www.example.com/ThankYou.html"
                }
            }
        });
        return false;
    });
</script>

HomeController. php

public function addMorePost(Request $request){
    $name = $request->name;
    $proposal = $request->file('proposal');
    foreach ($proposal as $file) {
        $file->store('proposals');
    }

    for ($count = 0; $count < count($name); $count++) {
        $data = array(
            'name' => $name[$count],
            'proposal' => $proposal[$count]     //already change 'proposal[]' but not work
        );
        TagList::create($data);
    }
    return response()->json(['success' => 'done']);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...