我正在把头发拉出来。我不知道发生了什么。
我有一个Action方法,它从Post方法返回一些JSon。此方法没有身份验证。它是MVC 4 AjaxLogin系统的改编版(但在MVC3中使用它)
表单包含.post(),包含序列化数据。如果验证失败,则会产生一系列错误。代码如下所示:
[HttpPost]
public JsonResult JsonLogOn(LogOnModel model, string returnUrl)
{
if (ModelState.IsValid) { ... }
// If we got this far, something failed
return Json(new { success = false, errors = GetErrorsFromModelState() });
}
在附加到提交处理程序的方法中,在以下jquery中调用它。
if (!$form.valid || $form.valid()) {
$.post($form.attr('action'), $form.serializeArray())
.done(function (json) { ... });
}
这是奇怪的部分。如果我使用提交按钮,一切都很好。该方法返回状态为200(并在fiddler中选择请求中的属性显示SESSION STATE:Done。),并且.done()执行。
如果我使用一些javascript来调用form.submit(),那么它会发布帖子,但是http请求总是失败,并且SESSION STATE:Aborted。 (仍然根据fiddler返回200结果代码)并且永远不会执行.done()。
在任何一种情况下,发送到action方法的任何标头或数据之间几乎没有区别,但是在使用.submit()时它总是中止,并且在使用提交按钮时总是成功。
我像这样附上提交处理程序:
// Load the dialog with the content=1 QueryString in order to get a PartialView
$.get(url + separator + 'content=1')
.done(function (content) {
dialogs[id] = $('<div class="modal-popup">' + content + '</div>')
// (jquery ui dialog code omitted for clarity)
.filter('div') // Filter for the div tag only, script tags could surface
.find('#frm_login') // Attach logic on forms
.submit(formSubmitHandler)
.end();
});
这个让我发疯。有关找到这个中止原因的建议吗?
编辑:
浏览器版本并不重要,它在IE,Firefox,Chrome等上做同样的事情。
EDIT2:
我试图点击使用JS点击提交按钮,它也失败了。
这似乎与我从这样的链接href执行提交这一事实有关:
<div id="loginBn"><a href="javascript:$('#blah').click();">Login</a></div>
以下代码成功。
<button onclick="javascript:$('#blah').click();"></button>
它不应该尝试在给定javascript引用的任何地方导航,但它似乎因为它而中止。
答案 0 :(得分:0)
事实证明,如果你使用链接的href属性来调用javascript,那么它将对从它执行的任何ajax请求发出中止。我通过使用链接的onclick处理程序来修复它。