Javascript ASP.NET MVC和WebAPI使用数据库表插入和检索记录
我目前正在使用ASP.NET创建网页 我在以下位置有一个页面:myUrl/INVs/Transaction 从用户的角度来看:我现在实际做的是在我的页面中创建一个项目列表。然后我按下保存按钮。同样的页面被刷新以显示我刚才创建的项目 在我看来,按下保存按钮后,它将执行以下javascript代码: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
//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 });