我有一个输入类型=“文件”,并且在更改输入时我想要提交表单。
$(document).on("change", "#image-upload", function (e) {
$.ajax({
url: '/BlogPost/UploadHomeReport',
type: 'POST',
data: $('#upload-image-form').serialize(),
success: function (response) {
console.log(response);
}
});
});
<form action="~/BlogPost/UploadHomeReport" method="post" enctype="multipart/form-data" id="upload-image-form">
<input type="file" id="image-upload" name="file" />
<input type="text" name="destinationId" id="destinationId" />
</form>
[HttpPost]
public JsonResult UploadHomeReport(HttpPostedFileBase file, int destinationId)
{
var fileName = Path.GetFileName(file.FileName);
file.SaveAs(Server.MapPath("~/App_Data/UploadedImages/" + destinationId + fileName));
var path = Server.MapPath("~/App_Data/UploadedImages/" + destinationId + fileName);
return Json(path);
}
一切都很完美,但是当它返回JSON时,它会重定向到一个新页面。为什么不返回JSON而不是重定向?
答案 0 :(得分:0)
听起来你的代码中还有其他问题。由于这是一个更改侦听器,因此不会自动提交。其他因素导致重定向发生。你需要粘贴你正在获得的响应(302?)并从那里调试。
此外,删除表单标记中的操作以查看它是否仍在提交,但如果您的应用程序可以在没有javascript的情况下运行,则最好提供后备。
答案 1 :(得分:-1)
默认情况下,您的表单操作正在执行。您需要使用e.preventDefault();
停止提交表单当更改事件发生时,下一个方法将保持并处理。
从URL路径我想假设这是ASP.NET(可能),然后表单操作处理将进行回发。