我试图经由JQuery的AJAX方法来调用一个ASP.NET MVC actionMethod。我的代码如下所示:

$('.Delete').live('click', function() {
    var tr = $(this).parent().parent();

    $.ajax({
        type: 'DELETE',
        url: '/Routing/Delete/' + tr.attr('id'),
        contentType: 'application/json; charset=utf-8',
        data: '{}',
        dataType: 'json',
        error: function(XMLHttpRequest, textStatus, errorThrown) {
            alert("Error: " + textStatus + " " + errorThrown);
            alert(XMLHttpRequest.getAllResponseHeaders());
        },
        success: function(result) {
            // Remove TR element containing waypoint details
            alert("Success");
            $(tr).remove();
        }
    });
});

和我的作用的方法是:

[AcceptVerbs(HttpVerbs.Delete)]
public string Delete(int id)
{
    // Deletion code

    return " ";
}

我返回一个空字符串,因为我读的地方,如果内容长度为0,那么它可能会导致问题,当返回类型为字符串,我得到一个警告框说:“错误:错误未定义”,第二个警告框是空的。

如果我让返回类型为void,我得到一个警告说“错误:parsererror未定义”,第二个警报如下:

Server: ASP.NET Development Server/9.0.0.0
Date: Wed, 22 Jul 2009 08:27:20 GMT
X-AspNet-Version: 2.0.50727
X-AspNetMvc-Version: 1.0
Cache-Control: private
Content-Length: 0
Connection: Close
有帮助吗?

解决方案

我不会建议返回一个空字符串。由于已经设定的数据类型为JSON jQuery将EVAL的响应。

您应该总是返回一个逻辑消息。

return Json(new { success = "true" });

N.B您使用$(tr).remove()成功内部; 有没有必要为您的TR变量已经一个jQuery对象,因此 tr.remove会工作得很好。

其他提示

您的jQuery呼叫预期的Json在请求的返回。所以:

[AcceptVerbs(HttpVerbs.Delete)]
public JsonResult Delete(int id) {
    // Deletion code
    return Json("");
}

和还我 redsquare 同意,这是更好地回报这样的逻辑消息:

[AcceptVerbs(HttpVerbs.Delete)]
public JsonResult Delete(int id) {
    // Deletion code
    return Json(new { Success = true });
}

//then in your jQuery function you can check the result this way :
success: function(result) {
    if (result.Success) {
        alert("it was deleted!");
    }
    else {
        alert("something went wrong");
    }
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top