0

i want to check some value in a loop so i make and web worker process, if that value is true then i stop the web worker and reload the page so here's my problem, i kept getting no result in my fetch query. i don't understand where the wrong part is.

here the main js on main page :

$.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>`
                            );
                        }
                    })

so as you can see, im trying to pass the id and token to my fingerwait.js so i can do some query with it. and here's my 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);

so every 3 seconds i want to execute and fetch that retreive data from database, and if the data exists i postMessage('ok'), and if doesn't exists i postMessage('belum'). now here's the problem i kept getting 'belum' even though the data is exist on the database. so i assume there's something wrong in the fingerwait.js but i am not sure where

and here is my function to check the data on database

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

so i tried to use self.addEventlistener to the fingerwait.js, i thought the problem was my id and token doesn't get pass on to the fingerwait.js, but if so then my fecth would be cacthing an error but it hasn't so i am out of option and don't know what to do

1 Answer 1

0

so i haven't found an solution for web worker fetch, i move the fingerwait.js to my main page and have the time out web work for the gif animation.

$('#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>`
                        );
                    }
      
                })
        })
    });

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.