jquery ajax call not asynchronous

后端 未结 2 1957
醉话见心
醉话见心 2021-01-14 10:07

I am fresh to jQuery\'s implementation of it\'s AJAX methods.

I have a simple setup that accesses two different pages, one which takes 10 seconds to complete (I have

相关标签:
2条回答
  • 2021-01-14 10:33

    I have discovered the cause of the javascript call hanging.

    To prevent a race condition from occurring with user session data, PHP locks the data until one of two conditions occur.

    1. The previously called PHP script calls session_write_close().

    2. The previously called PHP script completes processing and implicitly calls session_write_close().

    Following the logic that a call to the server that does not call session_start() should allow true asynchronous calls, I created a dummy PHP page that just spits out a simple string and called to that page every second while the 10 second script ran. It ran perfectly.

    The solution came from reading this discussion on the symfony forums.

    0 讨论(0)
  • 2021-01-14 10:36

    What about something like

    I dropped the try catch's and made your setTimeout's to look like check_id = setTimeout(progressCheck, 1000);

    function beginLogin(){
        var login_url = "http://example.com/home/loginScript";
        return $.ajax({
            url: login_url,
            success: function(data){
                $("#result_div").append('<pre>' + data + '</pre><hr/>');
                alert("finished");
            },
            error: function(a, b, c){
                console.log(a)
                console.log(b)
                console.log(c)
            }
        });
    }
    
    function progressCheck(){
        var check_url = "http://example.com/home/checkLoginProgress";
        var ajax = $.ajax({
            url: check_url,
            success: function(data){
                $("#progress_div").append('<pre>' + data + '</pre><hr/>');
            },
            error: function(a, b, c){
                console.log(a)
                console.log(b)
                console.log(c)
            }
        });
    
        check_id = setTimeout(progressCheck, 1000);
        return ajax;
    }
    
    // set progress checking function to call every second
    var check_id = setTimeout(progressCheck, 1000);
    
    function clearCheck(){
        try {
            clearTimeout(check_id);
        } catch (e) {
            alert("There was an error clearing the check: " + e);
            return false;
        }
        return true;
    }
    
    0 讨论(0)
提交回复
热议问题