【问题标题】:Ajax query result success call multiple timesajax查询结果成功调用多次
【发布时间】:2020-10-04 02:43:16
【问题描述】:

我有一个 ajax 调用,其中成功函数被调用了两次。我试图分析但不明白为什么它被调用了两次。

我正在使用 for 循环调用 ajax 功能,并且在其中我根据条件 (f==i+1) 在成功函数中调用第二个 ajax。如果条件匹配,那么它将调用第二个 ajax 功能,但发生的情况是,在循环结束后,第一个 ajax 调用的成功是调用 alert("Check call"); 两次。如果i=1 在循环中,它应该只调用一次。 第一个循环中发生的情况是条件没有成功,当循环结束时,第一个 ajax 的成功次数与循环发生的次数一样多,f 变为 2,i+1 变为 2,所以它会检查条件两次。

任何帮助将不胜感激。

    $(document).on("click", "#Rsub1", function (e) {
        if ($("#Rvno").val() == "" || $("#Rvno").val() == null) {
            alert("Please enter Vendor no");
        } else {
            for (var f = 0; f <= i; f++) {
                (function (index) {
                    $.ajax({
                        type: "POST",
                        url: "../Home/RaisePReq",
                        data: formData,
                        dataType: 'json',
                        contentType: false,
                        processData: false,
                        cache: false,
                        success: function (r) {
                            if (f == i + 1) {
                                alert("Check call");
                                var fieldvals
                                $.ajax({
                                    type: "POST",
                                    url: "../Home/gridtbl",
                                    data: JSON.stringify(fieldvals),
                                    contentType: "application/json; charset=utf-8",
                                    datatype: "json",
                                    success: function (r) {
                                        $('#grdtbl').html(r);
                                        //jQuery.noConflict();
                                        $('#ipcelltbl').DataTable({
                                            dom: 'Bfrtip',
                                            buttons: [
                                                'copy', 'csv', 'excel', 'pdf', 'print'
                                            ]
                                        });
                                    },
                                    failure: function () {
                                        alert("Error");
                                    }
                                });
                            }
                        },
                        failure: function () {
                            alert("Error");
                        }
                    });
                })(f);
            }
        }
    });

【问题讨论】:

  • 嗨,i 是什么?还有你为什么要检查 if (f == i + 1) { 里面的成功函数?请详细说明。
  • @Swati 是一个全局变量,我已经声明它从那里取值。
  • 是否有必要将if (f == i + 1) { 条件放入success 中?为什么不把那个外部ajax调用?如果条件是true,那么你的first -ajaxsecond ajax 将被执行,如果不是真的,它不会进入ajax。

标签: jquery ajax asp.net-mvc


【解决方案1】:

嗨@sam,欢迎来到 SO,

取一个flag,在start成功脚本之前初始化为false,如果成功则将flag true放在成功脚本的底端,并加上一个语句在成功脚本的开始检查标志是否 true 然后退出等。

【讨论】:

  • @waquar 能否请您显示我不知道标志的语法以及如何在我的情况下使用。
  • @Sam 请查看我编辑的答案。我现在不动手编码,请尝试向您展示完整的编码序列,您也可以在其中定义 flag(boolean) 变量。
【解决方案2】:
if i = 1
then
for (var f = 0; f <= i; f++) {
for (var f = 0; 0 <= 1; f++)
for (var f = 1; 1 <= 1; f++)
stop because    2 <= 1 is false.
if i = 1 then for loop running 2 times.

【讨论】:

  • 我把条件成功 if(f=i+1) 如果这个条件匹配那么它里面的条件应该运行但是它运行了两次。
  • 您可以尝试使用 if (f==i) 而不是尝试 i +1。
  • 我尝试了在第一个循环中发生的事情,它在没有成功并检查条件的情况下退出循环。在第二次循环之后,它成功并检查 if(f==i) 但当时变量 f=2 & i=1 并且它没有检查条件。
【解决方案3】:

For 循环首先初始化变量,然后检查条件,然后执行一些代码并增加或减少变量。在您的情况下,当 i=1 时,它会在第一次执行时检查 f

【讨论】:

  • @Sam,根据这个 (f == i + 1) , alert("Check call") 这甚至不应该被执行一次。因为当循环运行时,f 将始终小于或等于 i,但永远不会等于 (i+1)。你能在执行两次时 console.log i 变量吗?
猜你喜欢
  • 2019-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-09
  • 2015-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多