as I posted before I am trying to fix the issue of ajax uploads

The problem:
upload fields do not work in ajax loaded components

The solution:
modify web2py_ajax.html
on the top add
response.files.insert(3,URL(r=request,c='static/
js',f='jquery.form.js'))
a bit below change the code to

function web2py_trap_form(action,target) {
   jQuery('#'+target+' form').each(function(i){
      var form=jQuery(this);
      if(!form.hasClass('no_trap')){
         if(form.find('.upload').length>0){
            //using ajaxForm has the disadvantage that the header is
not returned in xhr
            //can this be fixed in the ajaxForm plugin???
             form.ajaxForm({
                url: action,
                success: function(data, statusText, xhr) {
                    complete_web2py_ajax_page(xhr, data, action,
target)
                }
             });
         }else{
            form.submit(function(obj){
             jQuery('.flash').hide().html('');
             web2py_ajax_page('post',action,form.serialize(),target);
             return false;
            });
         }

      }
   });
}
function complete_web2py_ajax_page (xhr, text, action, target){
      var html=xhr.responseText;
      var content=xhr.getResponseHeader('web2py-component-content');
      var command=xhr.getResponseHeader('web2py-component-command');
      var flash=xhr.getResponseHeader('web2py-component-flash');
      var t = jQuery('#'+target);
      if(content=='prepend') t.prepend(html);
      else if(content=='append') t.append(html);
      else if(content!='hide') t.html(html);
      web2py_trap_form(action,target);
      web2py_ajax_init();
      if(command) eval(command);
      if(flash) jQuery('.flash').html(flash).slideDown();
}
function web2py_ajax_page(method,action,data,target) {
  jQuery.ajax({'type':method,'url':action,'data':data,
    'beforeSend':function(xhr) {
      xhr.setRequestHeader('web2py-component-
location',document.location);
      xhr.setRequestHeader('web2py-component-element',target);},
    'complete':function(xhr,text){
        complete_web2py_ajax_page(xhr, text, action, target);
      }
    });
}

however this still has a problem
if there is an upload field it will use ajaxForm which does some
iFrame magic to upland the uploads. by doing this it will loose the
response header and thus web2py-component-command and web2py-component-
flash ...
you can fix the flash by using
session.flash (?not sure if this is true but I think it worked)
and write the component-command directly into the returned HTML

it would be nice if the header could be reconstructed by the ajaxform
plugin
http://github.com/malsup/form/blob/master/jquery.form.js
somewhere around line 354 the dummy header object is constructed
I have no clue if retrieving the header and rebuilding it is even
possible because my js knowledge is still quite limited ... maybe
somebody could help me out here and tell me if it is possible or not

Reply via email to