Javascript ASP.NET MVC和WebAPI使用数据库表插入和检索记录

Javascript ASP.NET MVC和WebAPI使用数据库表插入和检索记录,javascript,c#,asp.net,ajax,asp.net-web-api2,Javascript,C#,Asp.net,Ajax,Asp.net Web Api2,我目前正在使用ASP.NET创建网页 我在以下位置有一个页面:myUrl/INVs/Transaction 从用户的角度来看:我现在实际做的是在我的页面中创建一个项目列表。然后我按下保存按钮。同样的页面被刷新以显示我刚才创建的项目 在我看来,按下保存按钮后,它将执行以下javascript代码: //some javascript code written here. for (i = 0; i < rowCount; i++) { //some javascript code

我目前正在使用ASP.NET创建网页

我在以下位置有一个页面:myUrl/INVs/Transaction

从用户的角度来看:我现在实际做的是在我的页面中创建一个项目列表。然后我按下保存按钮。同样的页面被刷新以显示我刚才创建的项目

在我看来,按下保存按钮后,它将执行以下javascript代码:

 //some javascript code written here. 
 for (i = 0; i < rowCount; i++) {
   //some javascript code written here. 

   $.ajax({
          type: 'POST',
          data: { 'obj': newYTDTRNIObj },
          url: '/INVs/ProcessCreateYTDTRNIAsync',
          success: function (data) {
          console.log(data);


         }
         });

 }
 if (currentVoucherNumIsEmpty) {
    $.ajax({
           type: 'POST',
           data: { 'obj': newInvVouchObj },
           url: '/INVs/ProcessPatchTABVOUAsync',
           success: function (data) {

           if (currentPageTitle == "Inventory Receipt- Misc Receipt") {
                            location.href = currentUrl + "INVs/Transaction?tType=1&id=" + newInvVouchObj.PREFIX + newInvVouchObj.VOUCHNO;


           } else if (currentPageTitle == "Inventory Receipt- Return To Stock") {
                            location.href = currentUrl + "INVs/Transaction?tType=2&id=" + newInvVouchObj.PREFIX + newInvVouchObj.VOUCHNO;

           } else if (currentPageTitle == "Inventory Receipt- Production Receipt") {
                            location.href = currentUrl + "INVs/Transaction?tType=3&id=" + newInvVouchObj.PREFIX + newInvVouchObj.VOUCHNO;

           } else if (currentPageTitle == "Inventory Receipt- Purchase Receipt") {
                            location.href = currentUrl + "INVs/Transaction?tType=4&id=" + newInvVouchObj.PREFIX + newInvVouchObj.VOUCHNO;

           } else if (currentPageTitle == "Inventory Issue- Misc Issue") {
                            location.href = currentUrl + "INVs/Transaction?tType=5&id=" + newInvVouchObj.PREFIX + newInvVouchObj.VOUCHNO;

           } else if (currentPageTitle == "Inventory Issue- Production Issue") {
                            location.href = currentUrl + "INVs/Transaction?tType=6&id=" + newInvVouchObj.PREFIX + newInvVouchObj.VOUCHNO;

           }

           }
           }); 

 }
我注意到的是:当我插入2条记录时,在某些情况下,在显示我的视图之后,第二条记录被插入到数据库表中。因此,我的视图只显示插入的第一条记录。这是一种不一致的行为,在其他情况下,这两条记录被插入到数据库表中,当页面刷新时,它会显示这两条记录

发生这种情况是因为我没有等到第一个ajax完成后才刷新页面吗

这就是所谓的

Ajax将更改结果,因此除非刷新页面或禁用缓存,否则您将无法在视图中看到更新的数据

您可以尝试几件事,首先将您的Ajax cahce设置为false

  $.ajax({
           type: 'POST',
           data: { 'obj': newInvVouchObj },
           url: '/INVs/ProcessPatchTABVOUAsync',
           cache: false,
           success: function (data) {
或全球范围内:


我使用了另一篇文章中提到的方法

我创建了一个数组,它将存储ajax请求的所有承诺,该请求将数据插入数据库


然后我使用
$.when.apply(null,promissions).done
确保for循环中的ajax请求在刷新页面之前完成。这样可以确保在刷新页面之前将所有数据插入数据库

您正在发出ajax,甚至在所有请求收到响应之前,您正在刷新页面。因此,在页面并行重新加载时,插入正在进行,只显示已经写入的页面。它与响应缓存等无关。只与jQuery.post()方法有关,而与jQuery.ajax()无关
  $.ajax({
           type: 'POST',
           data: { 'obj': newInvVouchObj },
           url: '/INVs/ProcessPatchTABVOUAsync',
           cache: false,
           success: function (data) {
$.ajaxSetup({ cache: false });