javascript - 在另一个调用正在使用 php (Laravel) 执行长时间作业时创建一个 ajax

标签 javascript php ajax laravel asynchronous

我正在尝试制作一个实时填充的进度条。我试着改编这个 example到我的 laravel 项目,但可能我错过了一些东西。

我的 html 代码和 javascript 代码:

<div  style="border:1px solid black;width:500px;height:80px">
    <div class="bar" style="background-color:green;height:inherit;width:0px"></div>
</div>
<p id="progress"></p>
<button onclick="longJob()" type="button">long job</button>
<button onclick="getProgress()" type="button">progreso</button>

<script type="text/javascript">
function longJob(){
    $.ajax({
        url: "/longJob",
        type: "POST",
        success: function (response) {
            $('.bar').css('width', '250px');
        }
    })
}
function getProgress(){
    $.ajax({
        url: "/getProgress",
        type: "POST",
        success: function (response) {
            var progress = response['progress'];
            $('#progress').text(progress);
            if(progress < 10){
                getProgress();
            }
        }
    })
}
getProgress();
</script>

还有我的 php 函数:

public function longJob(){
    for($i=1;$i<=10;$i++){
        Session::set('progress', $i);
        sleep(1);
    }
    return response()->json([
        'success' => 'true'
    ]);
}
public function getProgress(){
    $progress = Session::get('progress');
    return response()->json([
        'progress' => $progress
    ]);
}

当我加载我的页面时,函数 getProgress() 开始反复运行,检索“0”。当我单击长作业按钮时,getProgress() 会停止 10 秒,直到 longJob 完成,然后检索进度 10。

最佳答案

此处的问题与 JavaScript 或您的 Ajax 实现无关。您在此处定义的两个 Ajax 函数都应该异步工作。

此问题与PHP 服务器被/longJob 请求阻塞有关。在 /longJob 请求完成之前,您的服务器不会处理其他请求。

这会导致您的 getProgress 函数等待仅在 /longJob 请求完成后才出现的响应。

PHP 内置服务器不会在单独的实例中运行每个请求。因此,一个长时间运行的请求将阻止所有其他请求。您将必须使用 XAMPP 服务器。

关于javascript - 在另一个调用正在使用 php (Laravel) 执行长时间作业时创建一个 ajax,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56127303/

相关文章:

javascript - D3 平移缩放溢出

php - 如何在php中使用函数实现ajax

如果我提交使用当前 html 中的 ajax 响应附加的表单,javascript 验证失败

php - 如何使用 Ajax 函数从 php 服务器获取 session 变量? (PHP HTML JS Ajax)

javascript - 如何将选择选项显示到新附加的选择选项

javascript - js 中的事件监听和提升

java - 使 index.html 成为路径的一部分

php - 如何使用 SOAP UI 为 SOAP 生成客户端 PHP 代码?

php - 为什么 get_headers() 返回 400 Bad request,而 CLI curl 返回 200 OK?

php - Laravel 在 Controller 中获取 url 的参数