2010-11-18 2 views
5

Я использую плагин jquery.form для асинхронной загрузки документов в проект MVC.Проблема с загрузкой Async с использованием jquery.form.js

Принимая мое руководство от this предыдущего ответа, вот что у меня есть на странице:

<% 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> 

Моей проблема заключается в том, что при загрузке страницы я получаю следующий яваскрипт ошибки:

Uncaught TypeError: Object # has no method 'ajaxForm'

Эти ошибка находится на линии, содержащей

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

Может ли кто-нибудь сказать мне, почему я получаю эту ошибку?

+0

Просто FYI, '/ Scripts/jquery.form.js' будет работать так же (если не более последовательно) как '../../ Scripts/jquery.form.js' - оба начинаются с корня сайта. –

ответ

0

Является ли 'uploadForm' идентификатором вашего <form> объекта? Если это так, вы можете захотеть проверить что-то вроде FireBug, чтобы убедиться, что ваш плагин включен на вашей странице правильно.

+0

Да, 'uploadForm' - это идентификатор моей формы. Загруженный источник «

". Если я использую инструмент debug/source в Chrome, я вижу, что загружается jquery.form.js IS (он указан на вкладке «Сценарии»). – awj

+0

IE9 говорит примерно то же самое: файл сценария IS загружается, а ошибка, с которой он возникает, - «SCRIPT438: Object не поддерживает это свойство или метод». – awj

+0

Возможно, вам придется изменить свой скрипт, чтобы он вызывался при загрузке страницы: $ (document) .ready (function() {... code ...}); Таким образом, форма будет иметь правильную прототипную функцию, если подключен плагин. В противном случае я бы посмотрел ваш сценарий, потому что это должно сработать. – wajiw

0

Ярлык:

$(function() { 

Не работает в последней версии JQuery, должны использовать:

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

Это полезно знать, но я бы не стал получать ошибку при загрузке страницы, если «$ (function() {« не работает в используемой вами версии. Тем не менее, спасибо за подсказку, и теперь у меня есть изменил его. – awj

+0

Это просто неправильно. У меня 1.7.2, и это работает без ошибок. –

+0

На момент написания этой статьи это была правда о последней версии –

1

Вот метод, который я использую для MVC3, CodeIgniter и Yii. Одним из важных является то, что вам следует указать метод = «пост», ENCTYPE и кодирование = «многочастному/форм-данных»

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

Убедитесь, что JQuery не включаются в страницу дважды.

+1

Спасибо миллиону! После того, как я проработал над ним часами и часами, это было решением, – idok

0

проверить, если у вас есть $

$('#your-form')

и не

('#your-form')

Смежные вопросы