Laravel Ajax Post запрос возвращает пустой массив - PullRequest
0 голосов
/ 01 июня 2018

Итак, для этого задания мне нужно добавить индикатор выполнения для загрузчика Dropify в приложении Laravel.Но кажется, что он не может найти сеанс по ключу, когда я распечатываю сеанс с ключом, все, что он делает, это возвращает пустой массив ().

Моя форма

{{ Form::open(array('url' => route('admin.templates.store'), 'files' => true, 'id' => 'myForm')) }}
            <input type="hidden" value="myForm" name="{{ ini_get('session.upload_progress.name') }}">

                <div class="form-group{{ $errors->has('title') ? ' has-error' : '' }}">
                    {{ Form::text('name', null, ['class' => 'form-control', 'required' => 'required']) }}
                    {{ Form::label('name', 'Template name', ['class' => 'control-label']) }}
                    <i class="bar"></i>
                    {{ $errors->first('name', '<p class="help-block">:message</p>') }}
                </div>

                <div class="form-group{{ $errors->has('title') ? ' has-error' : '' }}">
                    {{ Form::textarea('description', null, ['class' => 'form-control', 'required' => 'required', 'size' => '1x1']) }}
                    {{ Form::label('description', 'Template omschrijving', ['class' => 'control-label']) }}
                    <i class="bar"></i>
                    {{ $errors->first('description', '<p class="help-block">:message</p>') }}
                </div>

                <div class="form-group{{ $errors->has('number_of_screens') ? ' has-error' : '' }}">
                    {{ Form::number('number_of_screens', '1', ['class' => 'form-control', 'required' => 'required']) }}
                    {{ Form::label('number_of_screens', 'Aantal objecten', ['class' => 'control-label']) }}
                    <i class="bar"></i>
                    {{ $errors->first('number_of_screens', '<p class="help-block">:message</p>') }}
                </div>

                <div class="form-group{{ $errors->has('templatefile') ? ' has-error' : '' }}">
                    {{ Form::label('templateFile', 'Browse') }}
                    {{ Form::file('templateFile' , ['class' => 'dropify', 'data-allowed-file-extensions' => 'zip', 'required' => 'required']) }}
                    <div id="bar_blank">
                       <div id="bar_color"></div>
                    </div>
                    <div id="status"></div>
                </div>

                <div class="button-container">
                    {{ Form::submit('Uploaden', ['class' => 'button button-medium']) }}
                </div>

            {{ Form::close() }}

Мой запрос Ajax

$.ajax({
                        type: "POST",
                        url: "{{route('admin.templates.uploadprogress')}}",
                        data: {
                            "data": $('#myForm').serialize(),
                            "_token": "{{ csrf_token() }}",
                        },
                        success: function() {
                            console.log("Geodata sent");
                        }
                    });

Мой маршрут

Route::post('/uploadprogress', 'AdminTemplateController@callSessionData')->name('uploadprogress');

Функция моего контроллера

public function callSessionData(Request $request){
    $key = ini_get("session.upload_progress.prefix") . "myForm";
    print_r($_SESSION);

    if (!empty($_SESSION[$key])) {
        $current = $_SESSION[$key]["bytes_processed"];
        $total = $_SESSION[$key]["content_length"];
        echo $current < $total ? ceil($current / $total * 100) : 100;
    }
    else {
        echo 100;
    }
}

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

Ответы [ 2 ]

0 голосов
/ 01 июня 2018

При использовании URL-адреса url: "{{route('/uploadprogress')}}", и при использовании Route Route::get() не Route::post(), например:

Route::get('/uploadprogress', 'AdminTemplateController@callSessionData')->name('uploadprogress');

, а при использовании Ajax:

$.ajax({
    type: "POST",
    url: "/uploadprogress",
    data: {
        "data": $('#myForm').serialize(),
        "_token": "{{ csrf_token() }}",
    },
    success: function() 
    {
        console.log("Geodata sent");
    }
});
0 голосов
/ 01 июня 2018

пара вещей, в вашем ajax вы не должны использовать php, почему бы вам не выбрать маршрут, уже созданный в вашей форме, он был бы намного более чистым.

Может быть, он ничего не возвращает, потому что этоэто не то, как вы должны получить доступ к SESSION на laravel.

Вы должны сделать это так:

$yourSessionArray = $request->session()->get('key');

Пожалуйста, прочитайте о том, как использовать SESSION с laravel на их документах.

...