1

パラメータとファイルをphpスクリプトに渡すために、jqgridとajaxFileUpload.jsスクリプトを使用しています。コードの構造は次のようになります。

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

ジレンマがあります:
jqgrid の動作によると、url_2.php が呼び出され、次に url_1.php が呼び出されます。
url_2.php はデータ (パラメーター + ファイル) を処理し、url_1.php は何も処理しません。
url_2.php はエラーまたはメッセージ (「既に存在します」など) を返す可能性がありますが、エラーは aftersubmit イベントによってフォームに表示され、このイベントは url_1.php からエラーを受け取ります!!!
ajaxfileupload を beforesubmit イベントに入れる義務があると思います!!!
このジレンマを解決するためのアイデアはありますか?

4

1 に答える 1

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ファイル fileUpload クラスはこれを使用します。これについては、jqgrid にも editurl が設定されている場合、フォーム編集で dataProxy 呼び出しを強制する方法で説明されています。

于 2012-05-28T07:39:10.883 に答える