【问题标题】:Getting 500 error when sending Ajax request发送 Ajax 请求时出现 500 错误
【发布时间】:2014-08-29 19:03:53
【问题描述】:

我已经阅读了这里所有关于它的帖子,但没有找到解决它的答案。

我在这个控制器中有一个动作:

public class AccountController : Controller
{
    [HttpPost]
    public JsonResult CheckUsername(string i_username)
    {
        var MembershipProvider = new OtakimMembershipProvider();

        return Json(MembershipProvider.CheckUsername(i_username));
    }
}

这是View中的代码:

$.ajax({
    type: "POST",
    url: '@Url.Action("CheckUsername", "Account")',
    contentType: "application/json; charset=utf-8",
    data: { 'i_username': 'silagy' },
    dataType: "json",
    success: function (data) {
        alert(data);
    },
    error: function () {

    }
});

现在我不断收到此错误:

POST http://localhost:61035/Account/CheckUsername 500 (Internal Server Error) 

根据这里的帖子,我正在使用它来生成 URL:

url: '@Url.Action("CheckUsername", "Account")', 

恢复原状 - 编辑


好的,在调试模式下挖掘后我发现了问题。

错误是:“无效的 JSON 原语:i_username。”

并基于这篇文章 "Invalid JSON primitive" in Ajax processing

我将代码更改为:

var data = { "i_username": "silagy" };

            $.ajax({
                url: '@Url.Action("CheckUsername", "account")',
                type: 'POST',
                data: JSON.stringify(data),
                datatype: "json",
                contentType: "application/json; charset=utf-8",
                error: function (xhr) {
                    alert('Error: ' + xhr.statusText);
                },
                success: function (result) {
                    alert(result);
                }
            });

【问题讨论】:

  • 不,我没有,但为什么要添加静态,控制器不是静态类
  • 您收到的是 500 错误,而不是 404。您收到的错误信息是什么?
  • 那么是哪一个:404 还是 500?这真的不是一回事......添加一个断点,看看动作被击中。之后只需调试您的OtakimMembershipProvider
  • 这是操作没有遇到的问题。我在“var MembershipProvider ...”行中添加了一个断点
  • 您是否更改了配置?我的意思是路线,主要是。你的代码看起来不错。您还可以检查Url.Action 是否有效,方法是检查您的视图或在$.ajax 之前设置debugger; 并在浏览器中打开开发者控制台。

标签: jquery ajax asp.net-mvc


【解决方案1】:

如果你使用 contentType = application/json,你应该json stringify你的数据。

试试下面的代码:

变体 1:

$.ajax({
    type: "POST",
    url: '@Url.Action("CheckUsername", "Account")',
    contentType: "application/json; charset=utf-8",
    data: JSON.stringify({ 'i_username': 'silagy' }),
    // ... 
});

或将 contentType 更改为 application/x-www-form-urlencoded; charset=UTF-8。 (实际上这是 jQuery ajax contentType 的默认选项,因此只需删除 application/json 即可解决问题)

变体 2:

$.ajax({
    type: "POST",
    url: '@Url.Action("CheckUsername", "Account")',
    contentType: "application/x-www-form-urlencoded; charset=UTF-8",
    data: { 'i_username': 'silagy' },
    // ... 
});

【讨论】:

    猜你喜欢
    • 2016-01-06
    • 2017-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-15
    • 2018-04-01
    • 1970-01-01
    • 2018-06-09
    相关资源
    最近更新 更多