gpt4 book ai didi

ajax - 在 Laravel 4 中等待 Controller 时显示进度

转载 作者:行者123 更新时间:2023-12-01 22:49:06 26 4
gpt4 key购买 nike

我有一个表单,想通过 ajax-post 发送到我的 Controller 。同时,HTML 正在等待记录的生成和保存,我想显示进度(现在只是数字)。我实在不明白为什么下面的代码不更新<div id="progress">Session::get('progress') .

Controller :

public function postGenerate() {
// getting values from form (like $record_num)
Session::flash('progress', 0);
$i = 1;
for ($i; $i < $record_num; $i++) {
$record = new Record();
// adding attributes...
$record->save;
Session::flash('progress', $i);
}
$response = Response::make();
$response->header('Content-Type', 'application/json');
return $response;
}

Javascript:

@section('scripts')
<script type="text/javascript">
$(document).ready(function() {
$('#form-overview').on('submit', function() {
setInterval(function(){
$('#progress').html( "{{ Session::get('progress') }}" );
}, 1000);
$.post(
$(this).prop('action'),
{"_token": $(this).find('input[name=_token]').val()},
function() {
window.location.href = 'success';
},
'json'
);
return false;
});
});
</script>
@stop

HTML:

@section('content')
{{ Form::open(array('url' => 'code/generate', 'class' => 'form-inline', 'role' => 'form', 'id' => 'form-overview' )) }}
<!-- different inputs ... -->
{{ Form::submit('Codes generieren', array('class' => 'btn btn-lg btn-success')) }}
{{ Form::close() }}

<div id="progress">-1</div>
@stop

最佳答案

这是因为 {{ Session::get('progess') }} 仅在页面首次呈现时评估一次。完成您想要的操作的唯一方法是实际向报告进度的不同 URL 发出额外的 AJAX 请求。像这样的事情:

Controller

// Mapped to yoursite.com/progress
public function getProgess() {
return Response::json(array(Session::get('progress')));
}

public function postGenerate() {
// getting values from form (like $record_num)
Session::put('progress', 0);
Session::save(); // Remember to call save()

for ($i = 1; $i < $record_num; $i++) {
$record = new Record();

// adding attributes...

$record->save();
Session::put('progress', $i);
Session::save(); // Remember to call save()
}

$response = Response::make();
$response->header('Content-Type', 'application/json');
return $response;
}

JavaScript

@section('scripts')
<script type="text/javascript">
$(document).ready(function() {
$('#form-overview').on('submit', function() {
setInterval(function(){
$.getJSON('/progress', function(data) {
$('#progress').html(data[0]);
});
}, 1000);

$.post(
$(this).prop('action'),
{"_token": $(this).find('input[name=_token]').val()},
function() {
window.location.href = 'success';
},
'json'
);

return false;
});
});
</script>
@stop

关于ajax - 在 Laravel 4 中等待 Controller 时显示进度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21530743/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com