【问题标题】:.ajax returns 500 error using mvc C#, can't get a success response. Just want a simple check that returns success or failure.ajax 使用 mvc C# 返回 500 错误,无法获得成功响应。只想要一个返回成功或失败的简单检查
【发布时间】: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\jsonjson 来回切换。

目前,无论电子邮件是否有效,只要按下按钮,就会执行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


【解决方案1】:

您必须修复 ajax 并删除内容类型 json

$.ajax({
    method: "POST",
    url: checkEmailUrl,
    data: {emailAddress:emailAddress},
      success: function () {
        self.sendEmail(); //currently just prints "success"
    },
    error: function () {
        self.showFailure();
    }
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 2014-07-10
    • 1970-01-01
    • 2021-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多