JQuery ajax 对 MVC 操作的调用总是在没有错误时返回错误
本文关键字:有错误 错误 返回 ajax MVC 操作 调用 JQuery | 更新日期: 2023-09-27 18:37:16
这是一个MVC3应用程序。我有以下javascript调用我的操作:
function editDescription(docId,fileName, fileDescription) {
$.ajax({
type: "POST",
url: "/OrderDetail/LoadModelData",
contentType: "application/json; charset=utf-8",
data: "{'id': '"+docId +"', 'filename': '"+fileName+"', 'description': '"+fileDescription+"'}",
dataType: "json",
success: function (result) {
alert("ok: "+ result.d);
},
error: function (result) {
alert('Oh no: '+ result.responseText);
}
});
这是我的行动:
[HttpPost]
public string LoadModelData(string id, string filename, string description)
{
return filename;
}
我运行代码,使用参数调用操作,没有任何内容为空,但每次都会调用错误函数。因此,每次都会出现带有"Oh no"的警告框,但从操作返回的字符串是正确的。如果文件名是测试.pdf则错误警报框显示
'Oh No: test.pdf'.
我查看了Firebug,没有错误。为什么不调用成功函数,尽管没有错误?
您期望(返回)操作方法中的string
值。那么为什么需要将数据类型指定为 json
?删除它,看看会发生什么。并且响应中没有 d 属性!因此,只需在警报中使用结果即可。
$.ajax({
type: "POST",
url: "/OrderDetail/LoadModelData",
contentType:"application/json; charset=utf-8",
data: JSON.stringify({
id: docId,
filename: fileName,
description: fileDescription
}),
success: function (result) {
alert("ok: "+ result);
},
error: function (result) {
alert('Oh no: '+ result.responseText);
}
});
datatype
属性告诉服务器客户端期望返回的内容类型作为结果。
编辑:正如Darin所提到的,请使用JSON.stringify
方法来构建JSON请求。更新此答案以包括未来访问者的正确方法。
切勿使用字符串操作构建 JSON:
data: "{'id': '"+docId +"', 'filename': '"+fileName+"', 'description': '"+fileDescription+"'}",
这绝对是可怕的和错误的。您没有编码任何内容。在description
中引用一句话就足够了,一切都会破裂。操作 JSON 时始终使用 JSON 解析器
喜欢这个:
$.ajax({
type: "POST",
url: "/OrderDetail/LoadModelData",
contentType: "application/json; charset=utf-8",
data: JSON.stringify({
id: docId,
filename: fileName,
description: fileDescription
}),
success: function (result) {
alert("ok: "+ result.filename);
},
error: function (result) {
alert('Oh no: '+ result.responseText);
}
});
JSON.stringify
方法是本机内置的现代浏览器。如果需要支持旧版浏览器,可以包含 json2.js 脚本
另一个错误是控制器操作签名。在 ASP.NET MVC 控制器操作必须返回操作结果,而不是字符串:
[HttpPost]
public ActionResult LoadModelData(string id, string filename, string description)
{
return Json(new { filename = filename });
}