试图将异步方案

我有一个使用的getJSON的多个实例的应用程序,和我进入许多麻烦。 尖尖曾经建议返工主程序包括异步处理,而且我同意(现​​在我明白这个东西)。

试图返工此之前,它的结构是这样的:

Fill some arrays; Call processArray to create a set of strings for each; Stick the strings into the DIVs.

在processArray程序中,我调用$ .getJSON - 几次,你人都指出,我得到与预期值我没有权利期望麻烦。 总的常规处理数组到一个复杂的字符串,但某些阵列需要进行排序(非传统)第一。 我原来的结构开始问:是这样的数组进行排序? 如果是这样,我也如此这般,涉及的getJSON,然后返回主程序。 我做了什么给数组没有做过来主程序,继续看到原来的数组内容。

所以,这是processArray配置,如下所示:

function processArray(arWorking, boolToSort...) { if(boolToSort) {do special stuff} //continue on with processing return complexString; }

我想,我会尝试通过更换与做了排序,如果processArray与boolToSort = TRUE调用的函数的'arWorking“的说法,以保证有序数组在主程序中的夹杂物。 在我的思想,主程序的其余部分将继续有两个形式之一阵:作为传递原或排序的数组。 为此,我做了排序例程一个单独的例程:SortArray(arrayToUse)。

我想出了这一点:

function processArray( function(arWorking) {if(boolToSort) SortArray(arWorking); else return arWorking;}, boolToSort, ...) { //main routine return complexString; }

Firefox和IE9对象。 FF打破jQuery的,而IE9希望在调用参数的标识符。 看起来是错误的? 我可以在我使用boolToSort“的说法功能?”

--------------解决方案-------------

你理解本的第一部分是这样的:

$.getJSON()做它的异步工作。 这意味着,当你调用它,它是所有开始操作。 下面这个函数的代码将继续执行,而$.getJSON()调用在后台工作。 过了一段时间后,JSON结果将可用并成功处理程序将被调用。

只有在成功处理程序,你可以使用这些结果。

因此,你可以不写程序正常的代码,这是否:

function processArray() {
$.getJSON(url, function(data) {
// only in here can you process the data returns from the getJSON call
})
// you cannot use the JSON data here as it is not yet available
// you cannot return any of the JSON data from the processArray function

}

相反,你必须编写使用成功处理程序代码。 下面是这样做的一种方式:

function processArrays(urlToProcess1, urlToProcess2, callbackWhenDone) {
$.getJSON(urlToProcess1, function(data) {
// only in here can you process the data returns from the getJSON call
// do whatever you want to do with the JSON data here
// when you are done process it, you can then make your next getJSON call
$.getJSON(urlToProcess2, function(data) {
// do whatever you want to do with the JSON data here
// when done, you can then call your callback function to continue on with other work
callbackWhenDone();
});
});
}

不能做的另一件事是这样的:

function processArray() {
var result;
$.getJSON(url, function(data) {
// only in here can you process the data returns from the getJSON call
result = data;
})
return(result);
}

var data = processArray();
// code that uses data

因为结果数据不可用时processArray()返回时,你不能做到这一点。 这意味着不仅可以不使用它processArray内(但外面的成功处理程序),但你不能从processArray返回它(),你不能在processArray后编写的代码使用它()。 您只能使用数据的成功处理程序中,或从成功处理程序称为代码。

如果你有一大堆的URL来处理,你用在每一个相同的代码,你可以通过它们传递的URL数组和循环,开始只有当第一次的成功处理程序被称为下一个调用的getJSON。

如果你有一大堆的每个不同的代码的网址,你可以通过URL的数组和回调函数的数组(每个URL)。

仅供参考,我看到过boolToSort没有问题。 这听起来好像这个问题是你如何处理异步Ajax调用。

为了完整,可以使用同步Ajax调用,但不建议,因为这是一个坏的用户体验。 它锁定为网络运营这一般不是一件好事期间浏览器。 这是更好的使用普通的异步Ajax调用和构建你的代码与他们正常工作。

分类:JavaScript的 时间:2012-01-01 人气:0
本文关键词: JavaScript中,异步
分享到:

相关文章

  • 如何处理JavaScript中异步函数结果 2014-05-23

    从C#背景的,我可能从一个完全错误的角度来看待JavaScript,因此请多多包涵. 离开异步的优势,抛开一分钟,让我们说,我只是想在HTML5网页中检索从SQLite数据库的值. 我希望看到的是一样的东西 var something = db.getPicture(1); 现在考虑一个(也许很幼稚)执行本: this.getPicture(id) { this.database.transaction(function(tx) { tx.executeSql('SELECT ......',

  • 协调在Javascript中异步请求 2012-03-08

    我想用两个异步调用两种资源. 我想只有当资源被检索继续. 我怎样才能做到这一点优雅的JS? 这会工作: getStuff1(function (result1) { getStuff2 (function (result2) { // do stuff with result1 and result2 .... } } 但stuff2只是开始stuff1完成后. 我宁愿开始stuff2而等待stuff1. --------------解决方案------------- 如果您知道函数是在Java

  • 在JavaScript中异步创建新对象 2014-06-29

    我试图创建一个博客平台的构造,它具有很多异步操作里面发生. 这些范围从抓从目录中的帖子,把它们解析,通过模板引擎等,向他们发送 所以我的问题是,这将是不明智的,有我的构造函数返回一个承诺,而不是他们所谓的函数的对象的new打击. 例如: var engine = new Engine({path: '/path/to/posts'}).then(function (eng) { // allow user to interact with the newly created engine obj

  • 在JavaScript中异步调用处理 2012-09-10

    我钻进了小的麻烦在这里. 在我的document.ready函数我定义一个对象,该对象是由三个不同的Ajax调用(里面的document.ready)填充. 现在,我想做一个 console.log(myObject); 只有当3异步调用已经完全执行. 请建议的方式来做到这一点. --------------解决方案------------- 使用我建议你创建这样的功能: function onAllInformationIsReady() { console.log(myObject); }

  • 等待在JavaScript中异步调用 2013-04-10

    我使用的是chrome.experimental.webRequest.onBeforeRequest回调,我需要找到使从返回之前请求的选项卡的URL onBeforeRequest . 这通常是在HTTP请求中提到的URL,但我也想在没有发送如HTTPS HTTP请求引荐的URL. 我发现的唯一的事情就是chrome.tabs.get这是异步的. 什么是在返回前拿到标签网址的最佳方法? 我对解决这个两个想法: 使用类似的东西ManualResetEvent ,虽然这样的回答说,这是不可能的.

  • JavaScript中,去异步并返回到完全一样的地方 2013-11-13

    我输入javascript代码,我可以预先处理.. 在某些函数中的一些具体问题还有,我需要一些异步请求(如AJAX异步请求)更换令牌. 在运行时:当异步请求返回(正在执行的回调),我需要回到完全相同的位置(具有相同的上下文中)在我是在执行异步调用之前的代码. 它甚至有可能? 有任何想法吗? 注意:(1)我可以预先过程,更改代码,但是我有一个像.. (2)令牌可以是几乎任何地方,在一个循环中或其他地方.(3)令牌只是代表了异步调用的位置,我可以分析整个文档 此代码可能会在浏览器或通过运行的Node

  • 在JavaScript中使用PageRequestManager事件检测ASP.Net异步回发 2014-01-18

    如何检测ASP.Net异步回其设置,如控制的UpdatePanel导致回发,并在JavaScript中使用PageRequestManager事件和这里是我在做什么的例子: <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> </head> <body> <form id=&qu

  • 在Javascript中,是有可能传递一个变量到参数“src”? 2012-03-16

    是否有可能在Javascript中通过传递变量src参数? IE浏览器. <script type="text/javascript" src="http://domain.com/twitter.js?handle=aplusk" />` 我想twitter.js来看看,看看一个"手柄"在做什么,我需要它做的事,并返回其响应返回给调用原始页面前通过twitter.js . 我原本在创建的函数twitter.js是做了以下内容: fu

  • 计时器如何在Javascript中工作? 2012-05-28

    我不太明白计时器在Javascript中是如何工作的. JS是单线程那么代码运行并如用户点击按钮点击添加到队列中. 队列是空的,所以排队的样子说: [点击进入] 这将尽快我国当前正在运行的结束代码是正确执行的? 比方说,同样的代码,虽然仍然运行,并没有完成,只是还没有和时间表setTimeout(fn,3000) 现在我不知道如果我得到这个权利. 这fn没有添加到队列中,但会触发一些点接近,从这个非常时刻3000ms(不包括从当这段代码执行结束). 如果在其他执行代码(可能[点击]从上方)此当该

  • 为什么我不应该使用全局变量在JavaScript中的东西,常数? 2012-05-28

    我听说在JavaScript中的全局变量是坏的,我能理解一些命名空间问题等.可是为什么我不应该使用全局变量的东西永远不会被整个脚本改变 - 例如日期? (这改变每天,当然,但只有永远被引用,并在整个脚本没有改变.) --------------解决方案------------- 您可以使用全局变量,如果他们在你的想法是一个独特的命名空间的保护,只使用时是有益的. 主要的问题是全局可以(如果不使用不同的命名空间还是非常独特的名字)做出一条代码更容易与其他一些一段代码冲突. 出于这个原因和其他人,这

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 1.154 (s). 10 q(s)