2012-05-25 113 views
1

我使用jqgrid和ajaxFileUpload.js腳本爲了傳遞參數和文件到PHP腳本。代碼的結構是這樣的:與jqgrid和ajaxfileupload dilemna

... 
url:url_1.php, 
beforeSubmit: function (postdata,formid) 
    { 
     $.ajaxFileUpload ( 
     { 
      url: url_2.php, 
      ... 
      success: 
      error:  
     }), 
     return[true,""]; 
    }, 
afterSubmit: function(reponse,postdata) 
    { 
     ... 
     return [true,'','']; 
    } 

我有一個的dilemna:
按照jqGrid的行爲,url_2.php被調用,那麼url_1.php。
url_2.php處理數據(參數+文件),url_1.php不處理任何內容。
url_2.php可能會返回錯誤或消息(例如「已存在」),但錯誤以aftersubmit事件的形式顯示,並且此事件從url_1.php接收到錯誤!!!
我想我有義務將ajaxfileupload放在beforesubmit事件中!
任何想法來解決這個困境?

回答

0

您可以改用jQuery表單插件和jqGrid的dataProxy方法。

useDataProxy: true, 
    dataProxy : function (opts, act) { 

    opts.iframe = true; 
    var $form = $('#FrmGrid_' + $grid.jqGrid('getGridParam', 'id')); 
    //Prevent non-file inputs double serialization 
    var ele = $form.find('INPUT,TEXTAREA,SELECT').not(':file'); 
    ele.each(function() { 
     $(this).data('name', $(this).attr('name')); 
     $(this).removeAttr('name'); 
    }); 

    //Send only previously generated data + files 
    $form.ajaxSubmit(opts); 
    //Set names back after form being submitted 
    setTimeout(function() { 
     ele.each(function() { 
      $(this).attr('name', $(this).data('name')); 
     }); 
    }, 200); 
}; 

例如http://jqgrid-php.net file fileUpload類使用這個。這也在How to force dataProxy call in form editing if editurl is set in jqgrid中描述。

+0

dataproxy不在jqgrid wiki中! – Bertaud

+0

爲什麼setTimeout最後? – Bertaud