我有这个ajax:
function sendData() {
var question = (document.getElementById('question').value).toString();
var c = (document.getElementById('c').value).toString();
$.ajax({
url: '/Home/InsertData',
type: 'POST',
data: {question:question, c:c},
// data: {},
dataType: 'json',
contentType: 'application/json; charset=utf-8',
success: function () {
alert('suc');
},
error: function (error) {
alert('error');
}
});
}
在我的HomeController
中,我有以下功能:
[HttpPost]
public void InsertData(string question, string c)
//public void InsertData()
{
this.insertDataToCustomers(question, c);
}
当我运行它时,我收到了错误:
POST http://localhost:2124/Home/InsertData 500 (Internal Server Error)
如果我没有在InsertData
函数中询问输入值并且没有在ajax
中发送数据,那么它可以正常工作。为什么我不能将数据发送到InsertData
函数?
P.S。 question
和c
答案 0 :(得分:2)
删除它:
contentType: 'application/json; charset=utf-8',
您没有向服务器发送任何JSON,因此这是请求的错误内容类型。您正在发送application/x-www-form-urlencoded
请求。
所以:
function sendData() {
var question = $('#question').val();
var c = $('#c').val();
$.ajax({
url: '/Home/InsertData',
type: 'POST',
data: { question: question, c: c },
success: function () {
alert('suc');
},
error: function (error) {
alert('error');
}
});
}
您的代码的另一个问题是您指示dataType: 'json'
这意味着您希望服务器返回JSON,但您的控制器操作不会返回任何内容。这只是一种无效的方法。在ASP.NET MVC控制器中,操作应该返回ActionResults。因此,如果您想返回一些JSON来表示操作的状态,您可以这样做:
[HttpPost]
public ActionResult InsertData(string question, string c)
{
this.insertDataToCustomers(question, c);
return Json(new { success = true });
}
当然,您可以返回一个将被JSON序列化的任意对象,您将能够在success
AJAX回调中访问它。