MVC4和jQuery / AJAX - 发布JSON时找不到错误

时间:2014-10-11 07:58:00

标签: javascript jquery ajax json asp.net-mvc-4

我正在使用Ajax(和jQuery UI),当我按下对话框上的按钮时,我会在控制器中触发以下操作:

[HttpPost]
public JsonResult DeletePost(int adrId)
{
   return Json("Hello World Json!", JsonRequestBehavior.DenyGet);
}

我的JQuery代码如下所示:

<script type="text/javascript">
$(document).ready(function () {

    $("#dialog").dialog(
        {
            buttons: {
                "Ok": function () {
                    $.ajax({
                        url: '/Home/DeletePost',
                        type: 'POST',
                        data: { adrId: 6 },
                        dataType: 'json',
                        contentType: 'application/json; charset=utf-8',
                        error: function (xhr) {
                            alert('Error: ' + xhr.statusText);
                        },
                        success: function (result) {
                            CheckIfInvoiceFound(result);
                        },
                        async: true,
                        processData: false
                    });
                    $(this).dialog("close");
                }

            }
        });
    jQuery('.delete').click(function () {

    })
})</script>

然而,当我向服务器发帖时,我收到“错误:未找到”

2 个答案:

答案 0 :(得分:0)

试试这个:

<script type="text/javascript">
$(document).ready(function () {

    $("#dialog").dialog(
        {
            buttons: {
                "Ok": function () {
                    $.ajax({
                       ...
                        data: JSON.stringify({ adrId: 6 }),
                       ...
                    });
                    $(this).dialog("close");
                }

            }
        });
    jQuery('.delete').click(function () {

    })
})</script>

答案 1 :(得分:0)

问题在于您的data参数不是有效的JSON有效负载。

它不是有效的JSON,因为jQuery在内部使用jQuery.param()方法为典型的POST提交准备请求参数,并且它将转换为以下字符串:

adrId=6

但是,服务器需要JSON有效负载,而您指定的内容显然不是JSON有效负载。有效的JSON有效负载是:

{ 'adrId': 6 }

在data参数中发送正确的JSON的一种方法是重构你的jQuery AJAX,如下所示:

$.ajax({
    url: '/Home/DeletePost',
    type: 'POST',
    data: "{ 'adrId': 6 }",
    dataType: 'json',
    contentType: 'application/json; charset=utf-8',
    error: function (xhr) {
        alert('Error: ' + xhr.statusText);
    },
    success: function (result) {
        alert("success");
    },
    async: true,
    processData: false
});

或者您可以按照其他人的建议使用JSON.stringify。

另一种方法是将您的数据作为默认值'application/x-www-form-urlencoded; charset=UTF-8'发送,这样您就不必更改数据参数。代码将大大简化:

$.ajax({
    url: '/Home/DeletePost',
    type: 'POST',
    data: { adrId: 6 },
    error: function (xhr) {
        alert('Error: ' + xhr.statusText);
    },
    success: function (result) {
        alert("success");
    },
    async: true
});

JQuery会认识到结果是有效的JSON。