我正在尝试使用 ajax 和 JSON 从操作返回结果,并且它在不同页面/操作上工作得很好,但这个不起作用。
我的 JavaScript:
var lookup = $("#textbox").val();
$.ajax({
url: '/Controller/GetId',
type: 'POST',
dataType: 'json',
data: lookup,
contentType: 'application/json; charset=utf-8',
success: function (data) {
result = data;
}
});
我的行动:
public ActionResult GetId(string lookup)
{
ActionResult result = View();
Order order =
db.Orders
.Where(o => o.Code == lookup)
.FirstOrDefault();
result = Json(order.Id.ToString());
return result;
}
现在,我遇到了以下情况,但我无法真正解释:
- 使用上面的代码,console.log 将显示一切正常,Ajax 方法会抛出 500 内部服务器错误,并且我的操作中的断点未命中(就像该操作未调用或什么?)。
- 使用上面的代码,除了在查找周围使用 JSON.stringify 之外,我的断点命中,但参数为 NULL。当我继续通过操作进行调试时,debugger.exe 将卡住并崩溃。
我在不同的页面上有类似的情况,它将列表发布为 JSON.stringify,我的操作将其保存到数据库并返回结果消息。这工作得很好!我完全不明白为什么上面的方法不起作用。
编辑 我已经缩小了范围(只是一点点):事实证明,错误 500 内部服务器错误被抛出,因为我的操作中的代码没有正确处理空值。由于参数始终为 null,因此 JSON 未(正确)发送,因此它总是会中断/崩溃。我现在添加了一个 catch,因此 JSON 现在将正确返回错误(表示找不到我的订单)。
编辑2 我不知道为什么这种情况不起作用,而我的另一种情况却起作用。但是,解决方案是传递模型而不是纯字符串,并在整个模型上使用 stringify。最后,我的操作还需要接受模型:
var lookup = { lookup: $("#textbox").val() };
$.ajax({
url: '/Controller/GetId',
type: 'POST',
dataType: 'json',
data: JSON.stringify(lookup),
contentType: 'application/json; charset=utf-8',
success: function (data) {
result = data;
}
});
public ActionResult GetId(Order model)
{
ActionResult result = View();
Order order =
db.Orders
.Where(o => o.Lookup == model.Lookup)
.FirstOrDefault();
result = Json(order.Id.ToString());
return result;
}
最佳答案
尝试
var lookup = $("#textbox").val();
$.ajax({
url: '/Controller/GetId',
type: 'POST',
dataType: 'json',
data: {lookup: JSON.stringify(lookup)}, // change this
contentType: 'application/json; charset=utf-8',
success: function (data) {
result = data;
}
});
关于jquery - 使用ajax发送JSON到action,参数为null(返回内部服务器错误500),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25419879/