The answer is very useful for me.
Thanks a lot

On Fri, May 17, 2013 at 11:28 PM, Daniel Wagner <daniel.wag...@1und1.de>wrote:

> Another way to do it could be to store the value of k on the request
> object (also untested):
>
> var req = new qx.io.request.Xhr("/hrm/services/ActionServlet2", "POST");
> req.setUserData("reqid", k);
>
> req.addListener("success", function(e) {
>    var req = e.getTarget();
>    console.log(req.getUserData("reqid");
> }, this);
>
> On 17.05.2013 17:18, Derrell Lipman wrote:
> > On Fri, May 17, 2013 at 11:04 AM, fei wang <wang...@romeo-foxtrot.com
> > <mailto:wang...@romeo-foxtrot.com>> wrote:
> >
> >     Hi,
> >
> >     the follow is my snipplet code:
> >
> >     //----------------------------------------------------------------
> >     __arr : ['A', 'B', 'C', 'D', 'E', 'F'],
> >
> >     fillData : function() {
> >     for(var k=0; k<this.arr.length; k++) {
> >     var args = ...
> >     var req = new qx.io.request.Xhr("/hrm/services/ActionServlet2",
> "POST");
> >     req.setRequestData({
> >     'class' : 'InternalDAO',
> >     'method' : 'queryCommentAndScore',
> >     'async' : false,
> >     'args' : args
> >     });
> >     req.addListener("success", function(e) {
> >                              console.log("k=" + k); // Here, the value
> >     is always '6', why?
> >                              // BUT, My intention is to print 0, 1, 2,
> >     3, 4, 5. How shoud I do?
> >     }, this);
> >
> >     req.send();
> >     }
> >     }
> >
> > Your loop quickly sends out six requests, adds a listener function which
> > will be called when the Xhr response is returned, and then returns to
> > the browser. The final value of k, before returning to the browser and
> > before any instance of your listener function was called, is 6. The
> > "closures" that allow each of the listener functions to access that
> > now-out-of-scope variable, k, therefore each have that final value of k
> > before it went out of scope: 6.
> >
> > This is a very common problem encountered by people new to JavaScript.
> > There are various ways to solve the problem. JavaScript does not provide
> > block-level scope, so there is no pretty way to do it. Here's one
> > solution (untested):
> >
> > function getNewListener(index)
> > {
> > return function(e)
> > {
> > console.log("k=" + index);
> > };
> > }
> >
> > req.addListener("success", getNewListener(k), this);
> >
> >
> > Here, the getNewListener() function is called with each value of k, and
> > so each call instance has an index parameter which is used in the
> > returned function. Since each index parameter is unique, the closure has
> > a unique value to print in console.log.
> >
> > Read up on closures. It's a key aspect of JavaScript, and very
> > confusing, initially.
> >
> > Cheers,
> >
> > Derrell
> >
> >
> >
> >
> ------------------------------------------------------------------------------
> > AlienVault Unified Security Management (USM) platform delivers complete
> > security visibility with the essential security capabilities. Easily and
> > efficiently configure, manage, and operate all of your security controls
> > from a single console and one unified framework. Download a free trial.
> > http://p.sf.net/sfu/alienvault_d2d
> >
> >
> >
> > _______________________________________________
> > qooxdoo-devel mailing list
> > qooxdoo-devel@lists.sourceforge.net
> > https://lists.sourceforge.net/lists/listinfo/qooxdoo-devel
> >
>
>
> ------------------------------------------------------------------------------
> AlienVault Unified Security Management (USM) platform delivers complete
> security visibility with the essential security capabilities. Easily and
> efficiently configure, manage, and operate all of your security controls
> from a single console and one unified framework. Download a free trial.
> http://p.sf.net/sfu/alienvault_d2d
> _______________________________________________
> qooxdoo-devel mailing list
> qooxdoo-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/qooxdoo-devel
>
------------------------------------------------------------------------------
AlienVault Unified Security Management (USM) platform delivers complete
security visibility with the essential security capabilities. Easily and
efficiently configure, manage, and operate all of your security controls
from a single console and one unified framework. Download a free trial.
http://p.sf.net/sfu/alienvault_d2d
_______________________________________________
qooxdoo-devel mailing list
qooxdoo-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/qooxdoo-devel

Reply via email to