-1

嗨,我正在尝试对服务器执行 ajax 调用,但我似乎没有运气,我一直在控制台上返回错误 500 Internal server error。这是我的 ajax 调用:

    $("body").on("click", "#ok", function (e) {
    var id = $(this).attr("data-bookid");
    $.ajax({
        url: "/ProductEditor/DeleteBook",
        type:"POST",
        data: { bookId: parseInt(id) },
        success: function (data) {
            console.log(data);
        },
        error: function (data) {
            console.log(data);
        }
    });
    e.preventDefault();
})

这是我试图调用的 C# 代码:

public ActionResult DeleteBook(int bookId)
{
   bookRepository.DeleteBook(bookId);
   return RedirectToAction("Books", "ProductManager");
}

在尝试调试时,我注意到 DeleteBook 方法甚至没有被调用。

我究竟做错了什么?

编辑我已经添加了 [HttpPost] 属性,但它仍然不起作用

4

3 回答 3

2

没有更多信息,很难告诉你你做错了什么。

但是,errorjQuery ajax函数的函数回调需要三个参数:

(jqXHR, textStatus, errorThrown)

$.ajax({
    url: "/ProductEditor/DeleteBook",
    type:"POST",
    data: { bookId: parseInt(id) },
    success: function (data) {
        console.log(data);
    },
    error: function (jqXHR, textStatus, errorThrown) {
        console.log(errorThrown);
    }
});

第三个参数errorThrown将具有调用的 HTTP 响应文本/ProductEditor/DeleteBook。我建议查看 errorThrown 显示的内容,以及可能在调试模式下运行整个程序。

也许var id = $(this).attr("data-bookid");是不正确的,并且 id 的值被设置为undefined?

此外,您可以使用 IE 或 Chrome 中的 F12 开发工具中的网络选项卡、Firefox 中的 Firebug 或Fiddler来调试 ajax 调用。您可以查看发送到服务器的 ajax 请求以及来自服务器的响应,以查看是否以bookId正确的格式 (JSON) 发送了正确的数据 ( ) 以及来自服务器的响应是什么

于 2013-03-11T13:09:43.767 回答
1

您的WebMethod必须是静态的

[WebMethod(true)]
public static ActionResult DeleteBook(int bookId) 
{    
     bookRepository.DeleteBook(bookId);    
     return RedirectToAction("Books", "ProductManager"); 
}
于 2013-10-09T05:54:51.127 回答
0

将 HttpPost 添加到您的方法中并尝试

[HttpPost]
public ActionResult DeleteBook(int bookId)
{
   bookRepository.DeleteBook(bookId);
   return RedirectToAction("Books", "ProductManager");
}
于 2013-03-11T13:07:52.533 回答