.NET在第一个成功之后创建第二个Ajax调用
问题描述:
我有2个Ajax调用需要2个独立的控制器方法,一个创建一个floorplan对象并将其保存到数据库,另一个发送任何计划对象的数组(椅子,桌子等)到同一个数据库。.NET在第一个成功之后创建第二个Ajax调用
我在第一次调用成功的第二次ajax调用,但它似乎最初不会发生。我已经设置了断点来检查数据,并且平面布置图肯定添加了有效数据。如果我尝试创建另一个,那么它就可以工作,所以我不确定它是否是数据库问题,或者如果我的JavaScript错误。
这是Ajax调用我有我的JavaScript保存功能
$.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调用成功时调用不会在第一次尝试时执行,但是如果我做了ano它的平面布置图完美地工作。你们能否解决这个问题?我试图使用单个控制器的操作方法,但我无法正常工作。
答
有点修改你的代码(我可以让它在本地工作)。我怀疑它可能是第二次调用中的“数据”元素造成的麻烦。我会逐步检查进度并从那里开始。
如果您添加如下图所示的警报或日志消息,您会看到什么?
<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>
+0
感谢有关如何检查它的信息。原来,我有一个窗口重定位到另一个视图,这似乎发生在响应回来之前,所以它从来没有达到内部呼叫。 – Mark 2015-04-03 11:11:11
仅供参考:json中的'success'不会有条件地影响成功回调。在你的'success'回调函数中,你需要把'success:function(data){if(data.success){.....}' – Curt 2015-04-03 08:16:16
提示:考虑嵌套调用的promise API,它提高了可读性! – Yoeri 2015-04-03 08:18:20
@Curt谢谢你的提示,你帮我解决了我的问题以及SBirthare的回答。 – Mark 2015-04-03 11:08:20