2010-11-18 4 views
5

J'utilise le plugin jquery.form pour télécharger de manière asynchrone des documents dans un projet MVC.Problème de téléchargement asynchrone à l'aide de jquery.form.js

Prendre mon avance de this réponse précédente, voici ce que j'ai sur la page:

<% using(Html.BeginForm("Create", "JobFile", FormMethod.Post, new { id = "uploadForm", enctype = "multipart/form-data" })) %> 
<% { %> 
<%: Html.ValidationSummary() %> 

    <input type="file" id="fileToUpload" /> 
    <input type="submit" value="Upload file" /> 
    <input type="text" id="RelatedFileName" /> 

<% } %> 

<script type="text/javascript" src="../../Scripts/jquery-1.4.1.min.js"></script> 
<script type="text/javascript" src="../../Scripts/jquery.form.js"></script> 
<script type="text/javascript"> 
    $(function() { 
     $('#uploadForm').ajaxForm(function (result) { 
      if (result.errorMessage != '') { 
       alert(result.errorMessage); 
      } else { 
       $('#RelatedFileName').val(result.fileName); 
      } 
     }); 
    }); 
</script> 

Mon problème est que quand la page se charge je reçois l'erreur javascript suivant:

Uncaught TypeError: Object # has no method 'ajaxForm'

Cette erreur se trouve sur la ligne contenant

$('#uploadForm').ajaxForm(function (result) { 

Quelqu'un peut-il me dire pourquoi je reçois cette erreur?

+0

Juste un FYI, '/ scripts/jquery.form.js' fonctionnera de la même (si ce n'est pas plus cohérent) comme '../../ Scripts/jquery.form.js' - les deux commencent à la racine du site. –

Répondre

0

Est-ce que 'uploadForm' est l'ID de votre objet <form>? Si c'est le cas, vous pouvez vérifier quelque chose comme FireBug pour vous assurer que votre plug-in est correctement inclus sur votre page.

+0

Oui, 'uploadForm' est l'identifiant de mon formulaire. La source téléchargée est "

". Si j'utilise l'outil de débogage/source dans Chrome, je peux voir que jquery.form.js IS est téléchargé (il est répertorié dans l'onglet "Scripts"). – awj

+0

IE9 dit à peu près la même chose: le fichier script est en train de télécharger, et l'erreur qui en découle est "SCRIPT438: l'objet ne supporte pas cette propriété ou cette méthode". – awj

+0

Vous devrez peut-être modifier votre script puis il sera appelé sur le chargement de la page: $ (document) .ready (function() {... code ...}); Ainsi, le formulaire aura la fonction correctement prototypée si le plug-in est installé. Sinon, je regarderais dans votre script, parce que cela devrait fonctionner. – wajiw

0

Le raccourci:

$(function() { 

ne fonctionne pas dans toute dernière version de jQuery, doivent utiliser:

$(document).ready(function() { 
+0

est utile de savoir, mais je ne serais pas faire l'erreur sur la charge de page si « $ (function() { » ne fonctionnait pas dans la version que je me sers. Quoi qu'il en soit, grâce à la pointe, et je maintenant changé. – awj

+0

Ceci est tout simplement faux. J'ai 1.7.2 et cela fonctionne sans erreur. –

+0

au moment de l'écriture, il est vrai de la dernière version –

1

Voici la méthode que je me sers pour MVC3, CodeIgniter et Yû. important est ce que votre devrait spécifier method = "post", enctype et encoding = "multipart/form-data"

var submitForm = function(_formId){ 
var _genMsg = $('#genMsg'); 
_submitForm = $('form').index($('#'+_formId)); 
if(subCommonForm(_submitForm, 'main')){ 
    _genMsg.attr('class', 'information-box round'); 
    _genMsg.html('Saving...'); 
    $('#'+_formId).ajaxForm({ 
     dataType: 'json', 
     success: function (data) { 
      _genMsg.attr('class', 'information-box round'); 

      data.code == 0 
       ? _genMsg.attr('class', 'confirmation-box round') 
       : _genMsg.attr('class', 'error-box round'); 

      _genMsg.html(data.message); 
      _genMsg.fadeIn(); 
     } 
    }); 

    $('#'+_formId).submit(); 
} 
}; 
4

Vérifiez que jquery n'est pas inclus dans la page deux fois.

+1

Merci un million de fois breakin ma tête au-dessus pendant des heures et des heures, ce fut la solution, – idok

0

vérifier si vous avez la $

$('#your-form')

et non

('#your-form')

Questions connexes