我有以下ajax调用
$.ajax({
type: "POST",
url: url,
dataType: "json",
data: { occupants: occupants },
success: function (data) {
$("#summaryContent").html(data);
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
console.log("Status: " + textStatus);
console.log("Error: " + errorThrown);
}
});
一个看起来像这样的控制器
[HttpPost]
public PartialViewResult Verification(List<OccupantDto> occupants)
{
//do stuff
return PartialView();
}
我在我的ajax调用中遇到了这个错误
Error: SyntaxError: JSON.parse Error: Invalid character at position:5
我尝试从我的ajax调用中移除dataType: "json"
,删除错误,然后呈现我的局部视图,但是,在我的控制器中,occupants
是一个空列表。添加dataType: "json"
会在我的控制器中填充occupants
,但会引发错误。
答案 0 :(得分:2)
此部分位于$.ajax
方法调用
dataType: "json",
告诉jQuery你希望服务器的结果是一个有效的json字符串。所以jQuery会尝试将它显式解析为js对象(使用JSON.parse()
方法),并假设它是一个有效的JSON字符串响应,因为 你保证使用dataType: "json"
选项的jQuery 。
但在您的情况下,您将返回一个视图结果,这只是HTML标记。所以它无法解析为javascript对象。如果要解析的字符串不是有效的JSON,JSON.parse()
将抛出一个SyntaxError异常。这就是你得到的,因为parse方法调用崩溃,因此它执行error
方法的$.ajax
处理程序。
只需删除指定dataType
行的那一行。这应该工作
$.ajax({
type: "POST",
url: url,
data: { occupants: occupants },
}).done(function (data) {
$("#summaryContent").html(data);
}).fail(function (XMLHttpRequest, textStatus, errorThrown) {
console.log("Status: " + textStatus);
console.log("Error: " + errorThrown);
});
在大多数情况下,您无需指定dataType
属性值。如果没有指定任何内容,jQuery将尝试根据返回的响应的mime类型推断它。
现在,只要您拥有有效的项目数组(与OccupantDto
的结构匹配),您的occupants
参数将由模型绑定器正确映射,并且不会为null / empty集合
假设OccupantDto
有Id
和Name
属性(设置表公共属性),这应该有效
var occupants = [{ name: "Scott",id:4},{ name: "Shyju",id:6}];
$.ajax({
type: "POST",
url: '@Url.Action("Verification")',
data: { occupants: occupants }
})
从jQuery 3.0开始,删除了success()
,error()
和complete()
回调。您可以改用done()
,fail()
和always()
。