jQuery .ajax阻止.getJSON吗? - javascript

这是我的第一个问题,请保持温柔:)我已经尝试解决了几个小时,但进展很快。

背景

我有一个Web应用程序,其中使用.ajax()启动了一个进程。这可能需要一些时间才能完成,因此我建立了一个jQuery.progressbar()系统来提供UI反馈,该反馈与.ajax()同时启动(使用setInterval),并且每250ms调用一次。 getJSON()读取后台事件的进度。服务器端的所有功能似乎都可以完美运行。

问题

似乎(由于对console.log()的大量使用,.ajax()事件阻止了.getJSON()的运行,直到.ajax()完成。在我的控制台日志中,我每隔250ms就有一次指示updateProgressBar ()正在运行,但是直到原始.ajax()调用完成后,我才可以进入它的.done部分。

我在这里想念什么?

// file copy dialog
$(function () {
    $("#file_copy_dialog").dialog({
        autoOpen: false,
        resizable: false,
        height: 250,
        width: 400,
        modal: true,
        buttons: {
            "Copy Files": function () {
                // do ajax copy request
                console.log("Starting setInterval updateProgressBar()");
                window.interval = setInterval('updateProgressBar()', 250);
                console.log("---------------------------------- Firing file_copy AJAX request ---------------------------------");
                $.ajax({
                    type: "POST",
                    url: "/ajax/file_copy.php",
                    data: {
                        job_id: "<?php echo $item_data['job_id']; ?>",
                        item_id: "<?php echo $item_id; ?>",
                        quote_id: "<?php echo $item_data['quote_id']; ?>"
                    }
                })
                    .done(function () {
                    console.log("----------------------------- file_copy AJAX done --------------------------------------");
                });
            },

                "Cancel": function () {
                $(this).dialog("close");
            }
        }
    });
});

// paste button click event handler
$(function () {
    $("#paste_files").click(function () {

        // open dialog box
        $("#progressbar").progressbar({
            value: 0
        });
        $(".progress-label").text("Ready");
        $("#file_copy_dialog").dialog("open");

    });
});

// progress bar initiator
$(function () {
    var progressbar = $("#progressbar"),
        progressLabel = $(".progress-label");

    progressbar.progressbar({
        value: false,
        change: function () {
            progressLabel.text(progressbar.progressbar("value") + "%");
        },
        complete: function () {
            progressLabel.text("Complete!");
        }
    });
});


// file copy progress checker
function updateProgressBar() {
    console.log("Running updateProgressBar()");
    $.getJSON("/ajax/file_copy_progress.php")
        .done(function (json) {
        console.log("In UpdateProgressBar().done");
        // successful check
        if (json.status == 'ERROR') {
            console.log("updateProgressBar() json.status = ERROR");
            $('#progresstext').text(json.message);
            clearInterval(window.interval);
        } else {
            console.log("updateProgressBar() json.status = " + json.status + " json.value = " + json.value);
            $('#progressbar').progressbar({
                value: json.value
            });
            $('#progresstext').text(json.message);
        }

        if (json.value == 100) {
            console.log("ClearInterval()");
            clearInterval(window.interval);
        }
    })

        .fail(function (jqxhr, textStatus, error) {
        // check failed
        $('#progresstext').text("Progress check request failed");
    });
}

请原谅我的格式...,感谢您可能提供的任何帮助。

编辑

多亏了Adeneo,以上代码完全没有问题。问题在于PHP锁定了会话文件。在最初的后端ajax()脚本中的战略位置调用session_write_close()和session_start(),将允许第二个脚本偶尔进行查找并读取状态。

参考方案

问题出在PHP,而不是jQuery。

正如@adeneo指出的那样,一次只有一个进程可以读取/写入会话文件。 (考虑时很合逻辑!)。呼唤

session_write_close() 

然后

session_start() 

在初始脚本中具有战略意义的地方,将允许第一个脚本偶尔读取会话变量,并使整个过程按预期工作。

jQuery ajax发布电子邮件字段 - javascript

我不确定为什么我无法发布电子邮件字段的内容,这是我的代码。<html> <head> <title></title> <script src="//code.jquery.com/jquery-1.11.2.min.js"></script> </head>…

jQuery Ajax上传文件php即使没有内容也接收数组 - javascript

它正在工作,但是在每次提交时,我什至都收到一个数组,甚至没有将文件添加到文件输入(多文件输入) postData = new FormData(this); $.ajax({ url: "/url", type: "POST", data: postData, cache: false, contentType: fa…

用户刷新页面或导航到其他页面时,侧边栏上的其他广告 - javascript

我有一个带有广告部分的侧边栏。当用户导航到其他页面或刷新页面时,我想在该部分上显示其他广告。我想轮播5-10个广告。每个广告都是一个脚本,因此包含10个以上的广告会减慢我的页面速度。在刷新时或用户导航到其他页面时轮播广告的最佳方法是什么?这是给我的wordpress博客的,但我不想使用插件。JS Fiddle<?php $ads = array(�…

jQuery val函数在隐藏字段上不起作用? - javascript

这是我的HTML代码:<div style='display:none;' id='allformid'> <div> <form action='#'> <input type='text' name='name' …

提取元素的HTML - javascript

我正在尝试获取HTML标签的内部HTML,到目前为止,我该怎么做?<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script> <script type="text/javascrip…