Tag: 异步

Jquery延迟了异步函数

我一直在阅读很多关于JQuery’s deferred对象的内容。 而且我可以看到解析代码的工作原理。 我使用Async.js写了这个,但建议使用promise。 大多数例子我发现只是链接到AJAX调用。 我想链接一个异步函数,但无法弄清楚如何做到这一点。 我正在从数据库中检索一个时间,然后将该时间用作url中的参数,最后我想进行一次AJAX调用。 这就是我所在的地方: var fetch = function (contactId, callback, errorCallback) { var buildPromise = new $.Deferred(); var getLastImportTime = function () { var querySuccess = function (tx, result) { buildPromise.resolve(“7 oclock”); }; var queryError = function (tx, e) { buildPromise.reject(“Error querying database”); }; database.open(); database.query(“SELECT EventImportTime FROM Contact WHERE Contact.Id […]

将值从Firebase JS回调方法(DAL)返回到另一个函数(控制器)

我一直在研究一个简单的聊天应用程序,它允许用户在简单的群聊中输入消息,并让他们实时更新/显示。 因此我决定使用Firebase,并花了一些时间习惯其Web API。 但是,当我尝试手动创建一个简单的用户身份validation系统,甚至只是将值列表返回给另一个函数时,我遇到了一些问题。 我正在尝试遵循MVC模式,HTML表单触发global.js中的事件处理程序,然后调用控制器文件中的相应方法,然后在DAL中调用适当的方法。 DAL转到远程Firebase并执行请求的操作。 我的问题是,在once事件处理程序触发后,我没有得到任何结果。 控制器将执行checkUserLogin()方法,但不会将任何内容分配给变量loginValid 。 据我所知,从调试开始,执行到达事件处理程序的末尾然后自行删除。 我已经阅读了有关异步JS的一些内容,但并不是真的理解它。 我想要做的就是从Firebase检索一个列表,在将结果从DAL传递给控制器​​之前处理它以进行身份​​validation,然后在控制器中执行结果。 出于这些目的,我不关心实时更新,我有时只想返回Firebase列表中数据的当前快照,并在另一个函数内对其执行操作。 这是我的文件结构(必要时)。 global.js包含事件处理程序,负责处理HTML页面事件并选择适当的控制器操作( security_controller.js ),然后调用必要的DAL操作( security_dal.js )。 global.js $(document).ready(function() { $(“#btnSubmitLogin”).on(“click”, btnSubmitLogin_click); }); function btnSubmitLogin_click() { doUserLogin(); } security_controller.js function doUserLogin() { var username = $(“#txtLoginUsername”).val(); var password = $(“#txtLoginPassword”).val(); //Determine if user is logged in, and react accordingly var loginValid = checkUserLogin(username, […]

在jQuery(在非常慢的计算机上)执行另一个异步函数之前,如何确定异步函数是否已完成?

例如,假设我使用.addClass()方法。 你不能追加回调(例如你不能做$(’…’)。addClass(’…’)。load(’…’))。 在大多数情况下,您可以在使用.load()之前重新调用函数,然后就可以了。 但是,如果我有一台超级慢的计算机,使用.addClass()需要5秒钟呢? 如何在.addClass()完成后执行另一个异步函数,或者在任何 JavaScript异步函数完成后执行该操作? 编辑:我错了,.addClass 不是异步的。 所以,那么,只是为了确定: $(‘foo’).addClass(”); /*this code here will not execute UNLESS the previous line is absolutely finished?*/

同时执行同步和异步AJAX

我想运行AJAX来获取一些URL数据,从数据构建一个对象并将其分配给一个全局对象变量。 所以我知道我需要运行同步 ajax请求。 (对吧?)我也想利用beforeSend设置给我的用户一个加载屏幕。 (我可能应该首先询问,是在发送之前实现它的唯一方法吗?)我如何结合使用同步和异步的好处? 异步: $.ajax({ url:’scripts/scripts.php?call=page&url=’+thisurl, /*local*/ dataType:’html’, beforeSend:function(){ $(‘#display’).html(”); }, success:function(data, textStatus, jqXHR){ /*local*/ myobj = getMyObj(data); $(‘#display’).html(myobj); }, error:function(jqXHR, textStatus, errorThrown){ } }); 同步: $.ajax({ url:’scripts/scripts.php?call=page&url=’+thisurl, /*local*/ dataType:’html’, async:false, success:function(data, textStatus, jqXHR){ /*global*/ myobj = getMyObj(data); } }); $(‘#display’).html(myobj); 对不起,如果这没有意义

发送ajax请求而不等待回答

我想发一个ajax请求发送一些信息,并在发送后立即(无论我是否收到错误/成功)进行重定向(无需等待服务器响应) 我想知道我是否做了类似的事情 $.ajax({ url:_myurl_, timeout:500, success:function(){document.location= _redirectUrl_}, error: function(){document.location= _redirectUrl_} }) 会工作正常吗? 添加超时是否会取消我的请求?

Javascript / jQuery变量没有给出期望值

像我之前的其他人一样,我在Javascript中与范围挣扎。 (那并尝试阅读这些令人讨厌的东西)。 我已经检查过这个问题的一些先前的线程,但我似乎无法让它们正确地应用到我的issuue。 在下面的示例中,我想在完全填充数组后操作tagsArr数组中的值。 我将tagsArr变量声明在填充它的函数范围之外,以便全局访问它。 但是这个变量似乎没有我期望的范围 – 在我调用第16行将控制输出到控制台的地方, tagsArr.length为0。 $(function(){ var apiKey = [myapikey]; var tags = ”; var tagsArr = new Array(); $.getJSON(‘http://api.flickr.com/services/rest/?&method=flickr.people.getPublicPhotos&api_key=’ + apiKey + ‘&user_id=46206266@N05&extras=date_taken,tags&format=json&jsoncallback=?’, function(data){ $.each(data.photos.photo, function(i, item) { var photoID = item.id; $.getJSON(‘http://api.flickr.com/services/rest/?&method=flickr.photos.getInfo&api_key=’ + apiKey + ‘&photo_id=’ + photoID + ‘&format=json&jsoncallback=?’, function(data){ if (data.photo.tags.tag != ”) { $.each(data.photo.tags.tag, function(j, item) […]

同步jquery $ .ajax没有锁定IE?

花了一点时间试图实现这个并且有一个我觉得在firefox中工作得很好的解决方案,但是当在IE中测试发现使用async:false导致浏览器被锁定(停止响应并且已经冻结)通话时间。 要求基本如下。 我提供了一系列用户可以检查的复选框。 在特定时间,我调用我的函数’selectedSeriesData()’,该函数用于向我的服务一个接一个地发送请求以获取所请求的数据。 我特别选择使用sync,以便在执行方法时可以向浏览器输出状态消息和警告。 例如。 “加载数据1/3”,然后“加载数据2/3”,“加载数据3/3” 当然,我现在知道这会锁定某些浏览器,因此IE中的体验不仅会锁定浏览器,而且我尝试显示的任何消息都不会显示。 是否有任何类型的简单doEvents,例如我可以在每次ajax调用之后调用的操作,或者只是重构我的ajax调用的问题。 如果是这样的话,根据我的要求提供任何实施建议? 以下是代码的简化摘录以供参考。 function selectedSeriesData() { var seriesData = []; var index = 0; $.each($(“input[name=’idCheckBox’]:checked”), function () { var id = $(this).val(); $(“#loadingMessage”).text(“Loading ” + id + “…”); $.ajax({ type: ‘POST’, async: false, url: ”, dataType: ‘json’, data: { Id: id }, success: function (data) { seriesData[index] […]

如何使用Deferred顺序运行代码?

在这个for循环中,我希望强制它首先运行AJAX代码块。 使用结果(即data.LocationId ),我想将其保存在服务器上,然后在i减少的情况下运行循环。 如果你看到我的console.log,我希望它可能是: asyncProcess data.LocationId 7615 asyncProcess data.LocationId 7614 asyncProcess data.LocationId 7613 但实际上它是: asyncProcess asyncProcess asyncProcess data.LocationId 7615 data.LocationId 7614 data.LocationId 7613 怎么能实现这一目标? 这是我的代码: for (i = projectAreaSet.length-1; i >= 0; i–) { function asyncProcess(geometry) { console.log(“asyncProcess”); var deferred = new Deferred(); //Dojo, not jQuery var locationProfile = { ProjectId: projectId } $.ajax({ type: […]

jQuery的同步AJAX请求如何工作?

jQuery.ajax({async: false})仍然使用XMLHttpRequest对象? 如果是这样,请求如何同步? 函数定义中是否只有一些机制允许XHR发出的异步请求包装在同步包装器中? 我问,因为我想将异步函数调用包装到同步包装器中。 编辑 : 我想为依赖项做这件事。 在加载所有外部依赖脚本之前,我不需要再运行任何东西,但是,我宁愿不同步加载每个文件。 基本上,我想要这个: require([‘lib1.js’,’lib2.js’]) Library1Function(); Library2Function(); 要同时加载lib1和lib2,但阻塞直到两者都加载。 我知道我可以通过回调来做到这一点,但是如果我所包含的文件也以相同的方式包含依赖项,那么这不起作用。 EDITx2 回调不起作用的原因: # lib2.js window.Library2Function = function(input) { alert(input); } # lib1.js require(‘lib2.js’, function() { window.Library1Function = function() { window.Library2Function(‘Hi there’); } }); # main.js require(‘lib1.js’, function() { window.Library1Function(); }); 问题是,在main.js中,一旦加载并运行lib1.js,该回调将被发送。 问题是,在加载lib2.js之前,实际上并未定义Library2Function,这是在解析了lib1.js 之后发生的。

从异步OR同步JavaScript请求返回值

下面的函数首先执行同步比较test == 0 ,如果它通过,则返回一些内容,如果没有通过,则执行异步请求。 我的意图是让后者返回一些其他内容,例如“来自回调后的内容”,但知道我做错了。 在不将Ajax请求更改为同步的情况下,是否可以执行此操作? var value = function (test) { if (test == 0) { return ‘value is zero ‘; } else { return $.post(‘/echo/html/’, { html: ‘false ‘, delay: .5 }, function (r1) { console.log(‘r1’, r1); return ‘something from post callback’; }) .done(function (r2) { console.log(‘r2’, r2); return ‘something from done callback’; […]