2015-04-08 4 views
1

je créer un formulaire personnalisé Varien et que vous souhaitez soumettre le formulaire en utilisant la forme de prototype contient quatre champsPrototype: fichier de type d'entrée est manquant sur ajax soumettre

two text field and 
two file field. 

Mais quand je soumets les données à l'aide ajax du prototype js le formulaire n'a pas passé deux champs et sur enctype = "multipart/form-data" mais ne fonctionne pas. code:

<form action="bt" method="post" enctype="multipart/form-data" name="new-art-upload" id="new-art-upload"> 
<input type="text" name="fname" value="" class="input-text required-entry"/> 
<input type="text" name="fname" value="" class="input-text required-entry" /> 
<input type="file" name="fileone" class="required-entry" /> 
<input type="file" name="filetwo" class="required-entry" /> 
<button type="submit" title="<?php echo $this->__('Save The Art') ?>" class="button newAdd_Sub" onclick="newartUpload.submit(this)"><span><span><?php echo $this->__('Save Art') ?></button> 
</form> 

Script:

<script> 
    var newartUpload=new VarienForm('new-art-upload'); 
    newartUpload.submit=function(button,url){ 
    if(this.validator.validate) { 
     var form=this.form; 
     var oldUrl = form.action; 
     if (url) { 
      form.action = url; 
     } 
     var e=null; 
     try{ 
      // this.form.submit(); 
      new Ajax.Request(this.form.action,{ 
      method:this.form.method, 
      parameters:this.form.serialize(), 
        contentType: 'multipart/form-data', 

      onSuccess:function(transport){ 
       var response=transport.responseText.evalJSON(true); 

      }.bind(this) 
      }); 


     }catch(e){ 
     } 
     if(e){ 
      throw e; 
     } 
    } 
    }.bind(newartUpload) 
</script> 

Je suppose qu'il peut le type de contenu et le type contenu est principalement sous forme/

principal problème est que les champs de saisie de fichiers sont pas envoyé à la requête ajax

Répondre

3

Vous ne pouvez pas soumettre un fichier en utilisant Prototype via Ajax, car XMLHttpRequest (le fondement d'Ajax) ne fonctionne pas avec un formulaire en plusieurs parties. Il existe des solutions de rechange, telles que l'utilisation d'un iframe de type keyhole pour envoyer une requête de formulaire normale et l'utilisation d'un rappel via iframe pour rediriger ou réagir sur la page externe pour montrer que le formulaire est terminé. La nouvelle interface de fichier dans JS moderne (années normalisées après l'écriture de l'interface Prototype Ajax) permet maintenant d'envoyer des données de fichier via une soumission JS, mais cela a été activement découragé (et seulement possible dans une poignée de navigateurs, pas il y a trop longtemps) donc Prototype laisse simplement tomber les entrées du fichier de la liste des éléments de formulaire qu'il sérialisera.