.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它的平面布置图完美地工作。你们能否解决这个问题?我试图使用单个控制器的操作方法,但我无法正常工作。

+2

仅供参考:json中的'success'不会有条件地影响成功回调。在你的'success'回调函数中,你需要把'success:function(data){if(data.success){.....}' – Curt 2015-04-03 08:16:16

+1

提示:考虑嵌套调用的promise API,它提高了可读性! – Yoeri 2015-04-03 08:18:20

+0

@Curt谢谢你的提示,你帮我解决了我的问题以及SBirthare的回答。 – Mark 2015-04-03 11:08:20

有点修改你的代码(我可以让它在本地工作)。我怀疑它可能是第二次调用中的“数据”元素造成的麻烦。我会逐步检查进度并从那里开始。

如果您添加如下图所示的警报或日志消息,您会看到什么?

<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