区块链技术博客
www.b2bchain.cn

jQuery .ajax阻止.getJSON吗? – javascript程序员分享

本文介绍了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()  

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

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

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

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

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

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

赞(0) 打赏
部分文章转自网络,侵权联系删除b2bchain区块链学习技术社区 » jQuery .ajax阻止.getJSON吗? – javascript程序员分享
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

b2b链

联系我们联系我们