我有2个ajax调用转到2个独立的控制器方法,一个用于创建一个平面布置对象并将其保存到数据库,另一个用于发送任何计划对象(椅子,桌子等)的数组到同一个数据库。
我在第一次调用成功时有第二个ajax调用,但它似乎最初没有出现。我已经设置了断点来检查数据,并且平面图肯定会添加有效数据。如果我尝试创建另一个,那么它就适用了,所以我不确定它是否是数据库问题或者我的JavaScript是错误的。
这是我的JavaScript保存功能的ajax调用
$.ajax({
url: "/Floorplans/Create",
type: "POST",
contentType: "application/json",
data: JSON.stringify($floorplan),
success: function () {
$.ajax({
url: "/planObjects/Create",
type: "POST",
contentType: "application/json",
data: JSON.stringify($objArray)
//objArray is an array of planObjects
});
}
});
我的平面图控制器:
[HttpPost]
//Floorplan controller
public ActionResult Create(Floorplan floorplan)
{
if (ModelState.IsValid){
db.Floorplans.Add(floorplan);
db.SaveChanges();
return Json(new {success = true});
}
else{
return Json(new {success = false});
}
}
planObjects控制器:
[HttpPost]
public void Create(List<planObject> newObjects)
{
var model = new planObject();
if (ModelState.IsValid)
{
newObjects.ForEach(r => db.planObjects.Add(r));
db.SaveChanges();
}
}
使用此代码,第一次ajax调用成功时的ajax调用不会在第一次尝试时执行,但如果我再制作另一个平面图则它可以正常工作。你们能看到解决问题的方法吗?我试图使用单个控制器操作方法,但我无法使其正常工作。
答案 0 :(得分:0)
稍微修改了你的代码(我可以让它在本地工作)。我怀疑它可能是第二次调用中的“数据”元素导致麻烦。我会逐步检查进度并从那里开始。
如果您添加一些警告或日志消息,如下所示,您看到了什么?
<script>
$.ajax({
url: '@Url.Action("Create", "FloorPlans")',
type: "POST",
contentType: "application/json",
data: JSON.stringify($floorplan),
success: function(result) {
if (result.success) {
Log("Floor plan created successfully, adding plan objects...");
$.ajax({
url: '@Url.Action("Create", "PlanObjects")',
type: "POST",
contentType: "application/json",
data: JSON.stringify($objArray),
//objArray is an array of planObjects
success: function(result2) {
if (result2.success) {
Log("Plan objects created successfully");
} else {
Log("Failed to create plan objects");
}
}
});
} else {
Log("Failed to add floor plan");
}
}
});
function Log(data) {
//alert(data);
console.log(data);
}
</script>