2015-04-03 64 views
0

我有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

回答

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> 
+0

感謝有關如何檢查它的信息。原來,我有一個窗口重定位到另一個視圖,這似乎發生在響應回來之前,所以它從來沒有達到內部呼叫。 – Mark 2015-04-03 11:11:11

相關問題