就像我的标题说的那样,我遇到了一个问题,就是我的MVC Controller在一个新窗口中返回JsonResult,而不返回到ajax成功事件。
我还试图通过Ajax从Controller获取数据,或者将contenttype更改为类似于"application/ Json“的内容,但是我总是使用原始的Json数据获得一个新窗口。在我看来,问题必须与控制器有关,否则javascript无法捕获json数据。
这也不是浏览器特有的问题,我在每个普通浏览器中都有这样的问题。
有什么我错过的吗还是很奇怪?
控制器:
public JsonResult Update(ChangeUserInformationViewModel model)
{
var user = UserManager.FindById(User.Identity.GetUserId());
user = model.User;
UserManager.Update(user);
return Json(new { success = true }, JsonRequestBehavior.AllowGet);
}Ajax:
$(document).ready(function () {
$('#save-user-alert').click(function () {
$("#ChangeUserInformation").submit();
});
$('#save-user-alert').on("submit", function (event) {
event.preventDefault();
var url = $(this).attr("action");
var formData = $(this).serialize();
$.ajax({
type: "POST",
url: url,
data: formData,
contentType: "json",
success: function (resp) {
if (resp.success) {
swal("Goo Job!", "Yippii", "success");
};
},
error: function (resp) {
swal("Failes", "Upps.. something went wrong", "danger");
}
});
});});
Html:
@using (Html.BeginForm("Update", "User", FormMethod.Post, new { id = "ChangeUserInformation" }))
{
<div class="form-group">
<label for="Username">Username</label>
@Html.TextBoxFor(x => x.User.UserName, new { @class = "form-control", value = Model.User.UserName, id = "Username" })
</div>
<div class="form-group">
<label for="FirstName">First Name</label>
@Html.TextBoxFor(x => x.User.Firstname, new { @class = "form-control", value = Model.User.Firstname, id = "FirstName" })
</div>
<div class="form-group">
<label for="LastName">Last Name</label>
@Html.TextBoxFor(x => x.User.LastName, new { @class = "form-control", value = Model.User.LastName, id = "LastName" })
</div>
}
<button class="btn btn-danger waves-effect waves-light btn-sm" id="save-user-alert">Click me</button>请救救我!
塞巴斯蒂安
发布于 2017-11-21 20:13:12
您在浏览器中获取JSON响应,因为您的代码不是在执行ajax post,而是在执行正常的表单提交。
为什么不执行ajax提交?
因为您没有任何代码要求这样做。您正在将submit事件绑定到错误的元素。您应该将其绑定到表单,而不是按钮。
$('#ChangeUserInformation').on("submit", function (event) {
event.preventDefault();
// do your ajax call
});现在,当用户单击另一个按钮时,它将调用表单上的submit事件,并调用上述提交事件处理程序,并进行ajax调用。
发布于 2017-11-21 19:34:42
我认为问题在于您使用的是ajax调用的表单Submit。
将javascript代码更改为以下代码以删除提交行为:
$('#save-user-alert').click(function () {
event.preventDefault();
var url = $(this).attr("action");
var formData = $(this).serialize();
$.ajax({
type: "POST",
url: url,
data: formData,
contentType: "json",
success: function (resp) {
if (resp.success) {
swal("Goo Job!", "Yippii", "success");
};
},
error: function (resp) {
swal("Failes", "Upps.. something went wrong", "danger");
}
});
});https://stackoverflow.com/questions/47421082
复制相似问题