【发布时间】:2020-02-14 14:38:08
【问题描述】:
我有一个 ASP.NET MVC 应用程序,我正在尝试在 javascript 函数中使用 jQuery 一个接一个地进行一系列操作。该函数由三部分组成。
我想做的是:如果满足某些条件,那么我想执行同步的 jQuery ajax 调用 CheckData。取决于返回的结果:
- 返回 ok -> 我想继续执行 part2,最后按这个顺序执行 part3。
- 它返回 Nok -> 然后它完成并返回。它不会继续执行 part2 和 part3。
所以我设置了 async: false 但它不起作用,程序继续执行 part2 和 part3。 我知道 async:false 已被弃用,那么我该如何实现呢?
function onCheckValidData()
{
// do something....
// PART 1 STARTS HERE
if (some_condition_is_satified)
{
$.ajax({
url: '@Url.Action("CheckData", "MyController")',
async: false,
type: "POST",
dataType: "JSON",
beforeSend: function () {
showLoading();
},
success: function (result) {
if (!result.isOk) {
return;
}
},
complete: function(){
hideLoading();
}
});
}
// PART 2 STARTS HERE
// do something.....
// continue doing more thing.....
// more things.....
// PART 3 STARTS HERE
$.ajax({
url: '@Url.Action("MyActionMethod1", "MyController")?' + paramsStr,
type: "POST",
dataType: "html",
beforeSend: function () {
showLoading();
},
success: function (result) {
if (result == 'True') {
jsMethod2(); // jsMethod2 is another javascript method which contains another $.ajax block
}
else if (result == 'False') {
jsMethod3(); // jsMethod3 is another javascript method which contains another $.ajax block
}
else {
alert(result);
}
},
complete: function(){
hideLoading();
}
});
}
我在控制器中的操作:
private JsonResult CheckData()
{
MyBoolResult res = new MyBoolResult();
// do something....
return Json(new { isOk = res.isOk });
}
public String MyActionMethod1(String param1, String param2, bool param3, string param4, string param5)
{
// do something
return condition ? "True" : "False";
}
【问题讨论】:
-
没有理由使用同步 AJAX。不要做。要实现您需要的功能,只需将其他 AJAX 请求放在它们自己的函数中,然后从它们依赖的 AJAX 调用的回调中调用它们,如果需要,在参数中传递数据。
-
退后一步...您为什么希望这些请求是同步的?您试图在应用程序中实现的实际行为是什么?从行为开始,您应该能够对异步操作进行建模以实现该行为。
-
你为什么不在 ajax 中使用 ajax 呢?
if(result.isOk) { // Run the second part here } else { return false; } -
@David 我需要同步调用,因为我需要按顺序执行它们。我已经成功应用了Mischa解决方案。
标签: javascript jquery ajax asp.net-mvc asp.net-ajax