On Tue, Nov 5, 2013 at 11:53 AM, Andrew Buchan <[email protected]> wrote:

> Ok, the IT guy has disabled McAffee's "on access" scan for the folders
> containing web2py stuff as well as python's installation directory. He
> tells me that parts of McAffee other than "on access" scan may still
> interfere but there's not much we can do about that. This hasn't made any
> difference.
> As for the ajax calls, I thought it might be to do with the asynchronous
> calls taking too long when the server is overloaded (and it seems it is
> being hammered intermittently by another application), but I checked my
> web2py_ajax.html file and the ajax function is set to "async: false", so
> there shouldn't be an issue there unless there is some kind of timeout that
> kicks in?
>
> But.... I was about to post the above when I did some checks on the ajax
> calls, and am a bit confused...
> I have two javascript functions which call ajax:
>
> #Function1:  This call displays a check list of 'previous contracts' to
> pick from
> ajax('HubForms/Timesheets/AjaxReturnBlank', [],
> 'PreviousContractListingArea');
>
> #Function2:  Once user has check some items, they click a button to call
> this, which adds all selected contracts to timesheet, then reloads the page.
> jQuery('.PreviousContractCheckbox').each(
>     function(index)
>     {
>     if(this.checked)
>         {
>         jQuery('#ContractId').val(this.name);
>         ajax('HubForms/Timesheets/AjaxAddContractToTimesheet',
> ['ContractId', 'TimesheetId', 'UserId']);
>         }
>     }
>     );
> a='nothing, just works';
> window.location='HubForms/Timesheets/ViewTimesheet?Timesheet_Id=15995';
> location.reload(true);
>
> I temporarily modified the ajax function in web2py_ajax.html to display a
> pop-up, then wait 3 seconds before executing (last 4 lines modified):
>
>  function ajax(u,s,t) {
>   var query="";
>   for(i=0; i<s.length; i++) {
>      if(i>0) query=query+"&";
>
>  
> query=query+encodeURIComponent(s[i])+"="+encodeURIComponent(document.getElementById(s[i]).value);
>   }
>   /*this line:
>        jQuery.ajax({type: "POST", url: u, data: query, async: false,
> success: function(msg) { if(t==':eval') eval(msg); else
> document.getElementById(t).innerHTML=msg; } });
>   replaced by these 4 lines:
>   */
>   alert('hi');
>   setTimeout(function(){
>   jQuery.ajax({type: "POST", url: u, data: query, async: false, success:
> function(msg) { if(t==':eval') eval(msg); else
> document.getElementById(t).innerHTML=msg; } })
>   },3000);
> }
>
> The funny thing is that my Function1 does this (says 'hi' then pauses for
> 3 seconds), but Function2 says 'hi' for every item selected as you'd
> expect, but does NOT pause...
> This is making me wonder whether web2py's ajax function behaves
> differently when called from inside jQuery().each() as the setTimeout()
> is being ignored...?
>

I don't have a solution for your problem, if you could make a minimal
application that replicates the problem, it would
be easy to track it down.

setTimeout will not pause javascript execution, it will only put the given
function in a "queue" to be processed later.

Why are you doing an ajax call for each item checked?
I think you could just make one ajax call with a list of checked items, it
would be more efficient.

-- 
Resources:
- http://web2py.com
- http://web2py.com/book (Documentation)
- http://github.com/web2py/web2py (Source code)
- https://code.google.com/p/web2py/issues/list (Report Issues)
--- 
You received this message because you are subscribed to the Google Groups 
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to