I have found this recent thread: http://groups.google.com/group/web2py/browse_thread/thread/80941011f6407703/5047c1417c35b125#5047c1417c35b125
But I'm still not entirely sure what the net result is for multiple controller calls, via ajax or otherwise. What exactly does the -n option allow in terms of threading and handling requests in parallel? On May 24, 8:47 pm, eddie <eddie.sh...@gmail.com> wrote: > Hi guys, > > I'm looking for some help on allowing controller functions to respond > to ajax calls from a view in parallel. I've got my head around the > basic web2py architecture, but this is my first time trying out ajax > in web2py. > > Here's the problem. I have a simple view that makes a number of ajax > calls, to provide delay loading of data. The results are from querying > and parsing URLs on demand, so they can be slow. The controller > function I am calling (default/results_data) appears to be blocking, > only executing one request at a time. This obviously defeats the > purpose of delay loading the data on the page. > > I have made sure I am running the web2py app locally with the -n > option (for threads), but this isn't the issue. I have found the > session.forget() call, but this isn't it either. > > I am guessing there is something fundamental that I am doing wrong > here, I am hoping someone can clarify what is required to allow the > controller functions that respond to the ajax query to execute in > parallel, without blocking. > > A snippet from the html generated by the view: > > function sendRequest(url,callback,postData) { > try { > var req = createXMLHTTPObject(); > if (!req) return; > var method = (postData) ? "POST" : "GET"; > req.open(method,url,true); > req.setRequestHeader('User-Agent','XMLHTTP/1.0'); > if (postData) > > req.setRequestHeader('Content-Type','application/x-www-form- > urlencoded'); > req.onreadystatechange = function () { > if (req.readyState != 4) return; > if (req.status != 200 && req.status != 304) { > alert('HTTP error ' + req.status); > return; > } > callback(req); > } > > if (req.readState == 4) return; > req.send(postData); > } > catch (e) { > throw e;//alert(e); > }} > > ... > <script> > function source1_results(req) > {document.getElementById('query1_results').innerHTML = > req.responseText;} > sendRequest('/myapp/default/results_data? > query=foo&source_name=source1', source1_results) > function souce2_results(req) > {document.getElementById('source2_results').innerHTML = > req.responseText;} > sendRequest('/myapp/default/results_data? > query=foo&source_name=source2', source2_results) > </script> > ... > <table> > <tr><td>source1</td><td id="source1_results">Loading...</td><td><a > href="http://...">View page</a></td></tr> > <tr><td>source2</td><td id="source2_results">Loading...</td><td><a > href="http://...">View page</a></td></tr> > </table>