Hi, > fetchData routine make an ajax request, passes along jsonDataM to the > handler routine, at which time the responseJSON result is assigned to the > json parameter.
Remember that it's the *value* of `jsonDataM` that gets bound to the function, not a reference to the variable. (JavaScript is purely pass- by-value; the value passed in the case of object references is a reference to the object, but it's still just a value being passed.) So if your handler function inside `fetchData` is ending up doing something like this: jsonData = response.responseJSON; ...that's not going to have any effect on `jsonDataM`. All you're doing there is assigning the value of the `responseJSON` property to your local argument variable within `fetchData`. It's exactly like doing this: var foo = 5; bar(foo); alert(foo); function bar(f) { f = 6; } The alert will still show "5", not "6". Assigning to `f` doesn't have any effect on `foo`. One obvious answer is to have `fetchData` just assign directly to `jsonDataM`, since it's a global, but I hate to offer an answer suggesting using global variables (even if you already have them), and I'm guessing you have a reason for making the destination for the data an argument you give to `fetchData`. It's easy to simulate pass-by-reference in JavaScript using object properties. Instead of having a `jsonDataM` variable, have a variable that's an object containing a *property* called `jsonDataM`. Pass that object's reference to `fetchData`, and have `fetchData` write to its `jsonDataM` property. Applying that solution to my example above: var obj = { foo: 5 }; bar(obj); alert(obj.foo); function bar(o) { o.foo = 6; } Now it alerts "6". If I'm completely off-base on the above, first off: Apologies. And second off: My next guess is that the code isn't handling the fact that the ajax request is *asynchronous*. But my first guess (since you've titled this as a question about variable scope) is that it's the pass-by-value thing. HTH, -- T.J. Crowder Independent Software Engineer tj / crowder software / com www / crowder software / com On Apr 16, 11:18 pm, kstubs <kst...@gmail.com> wrote: > In the following, assuming jsonDataM is defined top of my script (so scope > of this variable should be good): > > mapqueryform.observe('submit', fetchData.bindAsEventListener(mapqueryform, > jsonDataM)); > > fetchData routine make an ajax request, passes along jsonDataM to the > handler routine, at which time the responseJSON result is assigned to the > json parameter. I'm expecting my global jsonDataM to have valid json data, > but it is just NULL. > > To be clear, here is the function definitions for fetchData and the handler: > > function fetchData(e, jsonData) { ... } > function handleFetch(response, jsonData) { ... } > > and in fetchData, here is the onComplete: > onComplete: function(response) { handleFetch(response, jsonData); } -- You received this message because you are subscribed to the Google Groups "Prototype & script.aculo.us" group. To post to this group, send email to prototype-scriptaculous@googlegroups.com. To unsubscribe from this group, send email to prototype-scriptaculous+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/prototype-scriptaculous?hl=en.