Web Worker 获取响应 laravel

问题描述 投票:0回答:1

我想在循环中检查一些值,所以我创建和网络工作进程,如果该值是真的,那么我停止网络工作人员并重新加载页面,所以这是我的问题,我在获取查询中一直没有结果。我不明白哪里错了。

这是主页上的主要js:

$.post('{{ url('') }}/input-data-finger', $("#finger-form").serialize())
                    .done(function(response) {
                        var myModal = new bootstrap.Modal(document.getElementById('loadfinger'), {
                            keyboard: false
                        })
                        myModal.show();

                        let id = $('#nama').val();
                        let token = document.querySelector('input[name=_token]').value;

                        var work = new Worker("/js/fingerwait.js");
                        work.postMessage([id,token]);

                        work.onmessage = function(event) {
                            if (event.data == 'ok') {
                                work.terminate();
                                work = undefined;
                                let test = $('#icon-gif').attr({
                                    trigger: 'in',
                                    delay: '2000',
                                    state: 'morph-correct'
                                });
                                $('#fingernotif').text('Data Fingerprint Berhasil Di Daftarkan');
                                $('#fingernotif-2').text('Page Akan Refresh Secara Otomatis');
                                work = new Worker("/js/fingerdone.js");
                                work.onmessage = function(response) {
                                    if (response.data == 'ok') {
                                        work.terminate();
                                        work = undefined;
                                        location.reload();
                                    }
                                }
                            } else {
                                console.log(event.data);
                            }
                        }
                    }).fail(function(response) {
                        var data = JSON.parse(response.responseText);
                        if (data.errors.nama_pengajar != null) {
                            $('.err_nama').empty().append(
                                `<span class="text-danger" style="font-size:15px">${data.errors.nama_pengajar}</span>`
                            );
                        }
                        if (data.errors.jadwal_pengajar != null) {
                            $('.err_jadwal').empty().append(
                                `<span class="text-danger" style="font-size:15px">${data.errors.jadwal_pengajar}</span>`
                            );
                        }
                    })

如您所见,我试图将 idtoken 传递给我的 Fingerwait.js,以便我可以用它进行一些查询。这是我的 Fingerwait.js

var id_p;
var token;

const cekInterval = setInterval(() => {

    onmessage = (e) => {
        id_p = e.data[0];
        token = e.data[1];
    }

    fetch(`{{ url('') }}/cek-pengajar-finger/${id_p}`, {
        method: 'GET',
        headers: {
            "X-CSRF-Token": token
        },
    }).then(function (response) {
        if (response == 'ok') {
            postMessage('ok');
        } else {
            postMessage('belum');
        }
    }).catch(function (err) {
        postMessage(err);
    })
}, 3000);

所以每隔 3 秒我想执行并从数据库中获取该检索数据,如果数据存在我 postMessage('ok'),如果不存在我 postMessage('belum')。现在的问题是,即使数据库中存在数据,我仍然不断收到“belum”。所以我认为 Fingerwait.js 有问题,但我不确定哪里出了问题

这是我检查数据库数据的函数

public function cekFinger($id)
    {
        $data = fingerprint::where('pengajar_id', $id)->first();
        if ($data == null) {
            return response('no', 406);
        } else {
            return response('ok', 200);
        }
    }

所以我尝试使用 self.addEventlistener 到 Fingerwait.js,我认为问题是我的 idtoken 没有传递到 Fingerwait.js,但如果是这样,那么我的 fecth 将被捕获错误,但事实并非如此,所以我别无选择,不知道该怎么办

laravel fetch-api web-worker
1个回答
0
投票

所以我还没有找到网络工作者获取的解决方案,我将 Fingerwait.js 移动到我的主页,并为 gif 动画设置超时网络工作。

$('#submitfinger').on("click", function() {
            $.post('{{ url('') }}/input-data-finger', $("#finger-form").serialize())
                .done(function(response) {
                    var myModal = new bootstrap.Modal(document.getElementById('loadfinger'), {
                        keyboard: false
                    })
                    myModal.show();

                    let id = $('#nama').val();
                    let token = document.querySelector('input[name=_token]').value;

                    setInterval(() => {
                        fetch(`{{ url('') }}/cek-pengajar-finger/${id}`, {
                            method: 'GET',
                            headers: {
                                "X-CSRF-Token": token
                            },
                        }).then(function(response) {
                            if (response.status == 200) {
                                let test = $('#icon-gif').attr({
                                    trigger: 'in',
                                    delay: '1000',
                                    state: 'morph-correct'
                                });
                                $('#fingernotif').text(
                                    'Data Fingerprint Berhasil Di Daftarkan');
                                $('#fingernotif-2').text(
                                    'Page Akan Refresh Secara Otomatis');
                                work = new Worker("/js/fingerdone.js");
                                work.onmessage = function(response) {
                                    if (response.data == 'ok') {
                                        work.terminate();
                                        work = undefined;
                                        location.reload();
                                    }
                                }
                            } else {
                                postMessage('belum');
                            }
                        }).catch(function(err) {
                            postMessage(err);
                        })
                    }, 3500);
                }).fail(function(response) {
                    var data = JSON.parse(response.responseText);
                    if (data.errors.nama_pengajar != null) {
                        $('.err_nama').empty().append(
                            `<span class="text-danger" style="font-size:15px">${data.errors.nama_pengajar}</span>`
                        );
                    }
                    if (data.errors.jadwal_pengajar != null) {
                        $('.err_jadwal').empty().append(
                            `<span class="text-danger" style="font-size:15px">${data.errors.jadwal_pengajar}</span>`
                        );
                    }
      
                })
        })
    });
© www.soinside.com 2019 - 2024. All rights reserved.