【发布时间】:2015-08-22 02:17:26
【问题描述】:
我正在尝试通过 xmlHttpRequest - Ajax 提交文件,例如。问题是当我单击输入按钮时,表单正在刷新并尝试将其发布到呈现此页面的操作方法。在提交按钮上单击我想发布到控制器上的操作方法-fileUploadUrl,这是一个 HTTP Post 返回 JSON。似乎我的 document.getElement 表单提交功能根本没有触发,它正在发布到这显然是不正确的。 /ErrorCode/Step1?id=form&enctype=multipart%2Fform-data.
我正在尝试遵循这个例子post a via ajax
@model Models.ErrorCodesStepsViewModel
@{
ViewBag.Title = "Error Codes";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<link href="@Url.Content("~/Content/css/Site.css")" rel="stylesheet" type="text/css" />
<link href="@Url.Content("~/Content/css/chosen.css")" rel="stylesheet" type="text/css" />
<link href="@Url.Content("~/Content/css/jquery.stepy.css")" rel="Stylesheet" type="text/css" />
<script src="@Url.Content("~/Scripts/jquery.stepy.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/chosen.jquery.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.MultiFile.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.fancytree.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.fancytree.filter.js")" type="text/javascript"></script>
<link href="@Url.Content("~/Content/themes/skin-xp/ui.fancytree.css")" rel="stylesheet" type="text/css" />
<script type="text/javascript">
var errorsSystemList = '@Url.Action("FindErrorSubsystem", "ErrorCode")';
var instrumentSelectionUrl = '@Url.Action("Step2", "ErrorCode")';
var fileUploadURL = '@Url.Action("Upload", "ErrorCode")';
$(function () {
$('form').stepy({
backLabel: '<<',
nextLabel: '>>',
finishButton: false,
next: function (index) {
var v = $("#InsIdLst").chosen().val();
if (v == null && index == 2) {
alert("Please select an Instrument");
return false;
}
else {
var overlay = $('<div></div>').prependTo('body').attr('id', 'overlay');
$.ajax({
type: 'GET',
url: instrumentSelectionUrl,
cache: false,
datatype: "html",
data: $("form").serialize(),
success: function (result) {
$("#errorCodes").html(result);
overlay.remove();
}
});
}
if (index == 3) {
}
}
});
});
}
<script type="text/javascript">
$(document).ready(function () {
$("#InsIdLst").chosen({ max_selected_options: 1 });
$("#errorCodes").fancytree({
icons: false
});
var errorTree;
errorTree = $("#errorCodes").fancytree("getTree");
var myform = document.getElementById("#form");
$(myform).onsubmit = function () {
alert("x");
var formdata = new FormData(); //FormData object
var fileInput = document.getElementById('fileInput');
//Iterating through each files selected in fileInput
for (i = 0; i < fileInput.files.length; i++) {
//Appending each file to FormData object
formdata.append(fileInput.files[i].name, fileInput.files[i]);
}
//Creating an XMLHttpRequest and sending
var xhr = new XMLHttpRequest();
xhr.open('POST', fileUploadURL);
xhr.send(formdata);
xhr.onreadystatechange = function () {
if (xhr.readyState == 4 && xhr.status == 200) {
alert(xhr.responseText);
}
}
return false;
}
});
</script>
@using (Html.BeginForm(new { id = "form", enctype = "multipart/form-data" }))
{
<fieldset title="Select">
<legend>instrument</legend>
<div class="bodyContent">
<span class="rightContent">
@Html.ListBoxFor(model => model.SelectedInstrumentTypeID, Model.InstrumentTypeIds, new { id = "InsIdLst", name = "listbox", @class = "chosen-select", multiple = "multiple", data_placeholder = "Click here to Select An Instrument...", style = "width:90%;", tabindex = "5" })
</span>
</div>
</fieldset>
<fieldset title="View">
<legend>Problem codes</legend>
<div id="errorCodes">
</div>
</fieldset>
<fieldset title="Upload">
<legend>upload file</legend>
<div class="bodyContent">
<input id="fileInput" type="file" />
<input type="submit" value="Upload file" />
</div>
</fieldset>
<fieldset title="Review">
<legend>description two</legend>
<!-- inputs -->
</fieldset>
<fieldset title="Save">
<legend>description two</legend>
<!-- inputs -->
</fieldset>
}
【问题讨论】:
-
你有
id="form"的元素吗?如果不是,您的提交处理程序将永远不会触发,并且表单提交将作为默认行为发生。 -
另外,如果您已经在使用 jQuery 处理一个 AJAX 请求,为什么不保持一致性并为您的 POST 做同样的事情?
-
@Jasen 我确实更正了表单并添加了 ID
-
@Jasen 因为我相信你不能通过 ajax 上传文件,我知道它仍然是通过 XML Http Request 对象但我相信你必须使用 javascript,
标签: javascript jquery