【发布时间】:2022-01-24 17:45:58
【问题描述】:
我正在尝试编写一个“简单”的 .ajax 调用。按下按钮时,我想检查表单的某个字段中的电子邮件是否为有效电子邮件。如果是这样,我想继续尝试发送电子邮件的方法。
这是我在 JavaScript 中的 .ajax 调用:
var emailAddress = $("#EmailAddress_Field").val();
$.ajax({
method: "POST",
url: checkEmailUrl,
data: emailAddress,
contentType: "json",
success: function () {
self.sendEmail(); //currently just prints "success"
},
error: function () {
self.showFailure();
}
});
这是我在控制器中的方法:
public ActionResult CheckEmail(string emailAddress)
{
try
{
MailAddress address = new MailAddress(emailAddress);
}
catch(System.FormatException e)
{
return Json(false);
}
return Json(true);
}
我已经改变了一切,最初我的 C# 方法是 async 并返回了 Task<ActionResult> 但我似乎遇到了竞争问题,所以我认为最好让它同步。我也尝试过以Json(new { Success = false }) 的格式返回,但这似乎也不起作用。我已经尝试在 .ajax 调用下添加 traditional: true 标志,正如另一个堆栈问题中所建议的那样,但无济于事。 contentType 也从 application\json 到 json 来回切换。
目前,无论电子邮件是否有效,只要按下按钮,就会执行error 功能。在 Chrome 的 Inspect > Network 选项卡下,我可以看到对 CheckEmail 的调用,但状态为 500,响应为 {"ClientMessage":"Unknown Error has occurred.", "Code":1},调用堆栈的最新调用在 jquery.js 中发送:
// Do send the request
// This may raise an exception which is actually
// handled in jQuery.ajax (so no try/catch here)
xhr.send((options.hasContent && options.data) || null); // There is an error here
最近的第二次调用是在 jquery.js ajax 中:
try {
state = 1;
transport.send(requestHeaders, done); // Call was here
} catch (e) {
...
使用 Debug 并单步执行,我可以看出我的 C# 函数在电子邮件有效时正确返回 Json(true),但不知何故服务器没有正确解析它并出错。
如果有人知道如何让 .ajax 报告成功,请告诉我。
【问题讨论】:
-
500 错误是服务器上的一般错误。您需要检查服务器日志以确定产生 500 错误的原因。
标签: javascript c# jquery ajax asp.net-mvc