2013-03-11 136 views
-1

嗨我正在尝试执行ajax调用服务器,但我似乎没有运气我一直在控制台回来一个错误500内部服务器错误。这是我的ajax调用:Ajax调用返回内部500错误

$("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]属性,但它仍然无法正常工作

+0

添加[HttpPost]你上面的控制器动作 – 2013-03-11 13:07:08

+0

有你装饰了你的方法有[HttpPost] – 2013-03-11 13:07:16

+1

AJAX调用是好的。正如消息所述,这是服务器错误,因此请检查您的服务器日志。 – 2013-03-11 13:07:18

回答

2

没有更多的信息,这是不容易,告诉你什么你做错了。

然而,对于jQuery的ajax功能error回调函数有三个参数:

(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请求以及来自服务器的响应,以查看是否以正确的格式(JSON)发送了正确的数据(bookId)以及服务器的响应是什么

+0

我也想添加你应该在您的MVC中处理错误行动,@CodeCaster在他对你的问题的评论中表示。 – 2013-03-11 13:25:03

0

添加HttpPost到你的方法,并尝试

[HttpPost] 
public ActionResult DeleteBook(int bookId) 
{ 
    bookRepository.DeleteBook(bookId); 
    return RedirectToAction("Books", "ProductManager"); 
} 
+0

我添加了它,但仍然没有调用该方法 – aleczandru 2013-03-11 13:10:06

+0

发布错误消息,你正在与500 – 2013-03-11 13:10:50

0

的WebMethod必须静态

[WebMethod(true)] 
public static ActionResult DeleteBook(int bookId) 
{  
    bookRepository.DeleteBook(bookId);  
    return RedirectToAction("Books", "ProductManager"); 
}