【问题标题】:jQuery form upload errorjQuery表单上传错误
【发布时间】:2011-07-09 16:09:53
【问题描述】:

我正在使用这个版本的jQuery表单插件https://raw.github.com/malsup/form/master/jquery.form.js 提交时出错:

form.submit();在线错误

SCRIPT87: Invalid argument. jquery.form.js, line 347 character 5

我的代码:

<form id="ajaxUploadForm" action="@Url.Action("Upload", "Home")%>" method="post" enctype="multipart/form-data" >
    <fieldset>
        <legend>Upload a file</legend>
        <label>File to Upload: <input type="file" name="file" /></label>
        <input id="ajaxUploadButton" type="submit" value="Upload" />
    </fieldset>
</form> 

$(function () {
        $("#ajaxUploadForm").ajaxForm({
            iframe: true,
            dataType: "json",
            beforeSubmit: function () {
               // $("#ajaxUploadForm").block({ message: '<img src="/Content/themes/start/images/progress.gif" />' });
            },
            success: function (result) {
               // $("#ajaxUploadForm").unblock();
                //$("#ajaxUploadForm").resetForm();
                $.growlUI(null, result.message);
            },
            error: function (xhr, textStatus, errorThrown) {
                //$("#ajaxUploadForm").unblock();
                //$("#ajaxUploadForm").resetForm();
                $.growlUI(null, 'Error uploading file');
            }
        });
    });

我正在侧面的简单模型对话框中进行此上传。

可能有人知道如何解决这个问题?

【问题讨论】:

    标签: asp.net-mvc-3 jquery-plugins


    【解决方案1】:

    如果您要发布到的控制器操作返回 JSON,您可能需要将其包装在 &lt;textarea&gt; 标记中,如文档中所述:

    由于无法上传 使用浏览器的文件 XMLHttpRequest 对象,表单插件 使用隐藏的 iframe 元素来帮助 与任务。这是一个常见的 技术,但它有内在的 限制。 iframe 元素是 用作表单的目标 提交操作,这意味着 服务器响应被写入 框架。这很好,如果响应 类型是 HTML 或 XML,但不起作用 以及如果响应类型是脚本 或 JSON,这两者通常都包含 需要reresented的字符 在找到时使用实体引用 HTML 标记。

    为了应对挑战 脚本和 JSON 响应,表单 插件允许这些响应 嵌入在 textarea 元素中,它 建议您这样做 这些响应类型在使用时 与文件上传结合。请 但是请注意,如果没有 在表单中输入文件,然后 请求使用普通 XHR 提交 表单(不是 iframe)。这使 你的服务器代码负担要知道 何时使用 textarea 何时不使用 到。如果你喜欢,你可以使用 要强制的插件的 iframe 选项 它总是使用 iframe 模式和 那么你的服务器总是可以嵌入 在文本区域中响应。

    【讨论】:

    • 问题是提交没有发生,我放了断点并在调试下检查它,它没有提交,还查看了提琴手以确保请求不会去其他地方,那里没有请求根本上,它只是由于某种原因未能提交。嗯...顺便说一句,我已经在我的控制器中包装了响应
    • @Joper,嗯,这很奇怪。您是否尝试过以正常形式执行此操作(不是在某些 jquery 对话框中)?
    • 在 Mozilla 中尝试了另一个浏览器(Mozilla 最新版本)它正在发送请求(可以在提琴手中看到它,但在调试时我看不到控制器上的请求)但收到错误 ReadResponse() failed: The server did not return a response for this request .之前尝试过最新的 Opera 和最新的 IE
    • @Joper,您的控制器操作如何?另外,直接在主视图中以没有对话框的正常形式进行测试怎么样?
    • @Joper,表单的action 属性在生成的 HTML 中是什么样子的?
    猜你喜欢
    • 2012-02-24
    • 2013-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-09
    • 1970-01-01
    相关资源
    最近更新 更多