I have two lists, one on the right and one on the left. When I click on a node on the left it does the following:
1) AJAX request $.post’s the content
of the node to the server2) If the transaction is successful on
the server, the node moves to the list
on the right via jQuery
To post to the server:
$.post($(F).attr('action'), $(F).serialize(), null, "script");
To move the node to the other list:
moveNode(element, to_list);
‘element’ and ‘to_list’ are local variables. I could make moveNode the callback, but if the transaction is not successful, I’ll have to post a bunch of error messages and things get clunky in my code. I’d also like the server to generate the error messages.
Is there any way to place the call to moveNode() in the server response?
It’s possible to do what you want, but I wouldn’t recommend it. Here’s how:
This works because
evalis very special and it executes in the scope in which it’s called (it’s a bit magic in that way), and so the code in the textevalevaluates has access to all of the variables in scope whereevalis called.Going slightly off-topic, but I would recommend a data-based approach instead. Perhaps:
…where your server either returns:
or
or whatever makes sense in your environment. Heck, if it’s really just “it worked” or “here’s an error”, you could just use a text protocol where “OK” meant okay and anything else was an error message (the internet is full of text-based protocols like that). I prefer more structure, but the point is you have options.
I would find that approach easier to maintain. When you start passing code back and forth between layers, code relying on knowing the names of in-scope variables, it seems like a major close-coupling issue.