Ajax中只有一个警报可以多次执行

时间:2019-02-01 07:10:22

标签: javascript jquery ajax

我正在使用Rails应用程序。我需要获取每个选定设备的状态。我能够实现这一点,但是在执行后,我会发出警报“成功创建执行记录”。对于每个Mac选择,它都会显示警报消息。我需要在执行结束时发出一个警报。我在call_endpoint方法中调用display_result。由于它是Ajax调用,因此每次执行都会发出警报。我不打算为此限制单个警报。

function display_result() {

$('#http_status').html("");
$('#http_status').append(result["response"].status);

if (result["response"].status == "404") {

    console.log("HTTP 404");
    $('#response_div').addClass("bs-callout-warning");
} else if (result["response"].status == "520") {
    console.log("HTTP 502");
    $('#response_div').addClass("bs-callout-danger");

} else {
    console.log("HTTP 200");

    $('#response_div').addClass("bs-callout-success");



if (result["response"].status == "200") {

    // $('.loader').show();
    $('#cover-spin').show();
    $.ajax({
        method: "GET",
        dataType: "text",
        url: "create_execution",
        data: {
            http_status: result["response"].status,
            mac_address: mac,
        },
        success: function (execution_record_id) {
            $('#cover-spin').hide();
           alert('Successfully created execution record");
        }

    });
 }
function call_endpoint() {


    var values = new Array();

    webpa = $('#Device-PA').is(":visible");
    rpil = $('#Device-SN').is(":visible");
    groupselect = $('#Group-Select').is(":visible");
    parameter_name = $('#tr_object').val();
    if (webpa) {

        $.each($("input[name='checkBox[]']:checked").closest("td").next("td"), function () {
            values.push($(this).text().trim())

        });
        m = values.length

    } else {
        $.each($("input[name='checkBox[]']:checked").closest("td").next("td"), function () {
            values.push($(this).text().trim())
        });
        m = values.length


    }

    serialnumber = $('#pa_serialnumber').val();
    oid = $('#sn_serialnumber').val();


    protocol = {
        pa: pa,
        sn: sn,
    }

    if (pa) {
        for (var i = 0; i < m; i++) {
            (function () {

                var macAdd = values[i];

                $.ajax({
                    method: "GET",
                    url: "get_object",
                    dataType: "json",
                    data: {
                        parameter: parameter_name,
                        mac: macAdd,
                        protocol: protocol,
                        serialnumber: serialnumber,
                    },

                    success: function (result) {
                        console.log(result);
                        NProgress.done();
                        console.log("result for webpa");

                        display_result();
                    },

                    statusCode: {
                        404: function () {
                            console.log("Call failed");
                        }
                    }
                });
                                  })();

        }
   }

2 个答案:

答案 0 :(得分:2)

  

下面的代码已更改。

直接复制以下代码。

function display_result(total,current) {

$('#http_status').html("");
$('#http_status').append(result["response"].status);

if (result["response"].status == "404") {

    console.log("HTTP 404");
    $('#response_div').addClass("bs-callout-warning");
} else if (result["response"].status == "520") {
    console.log("HTTP 502");
    $('#response_div').addClass("bs-callout-danger");

} else {
    console.log("HTTP 200");

    $('#response_div').addClass("bs-callout-success");



    if (result["response"].status == "200") {

        // $('.loader').show();
        $('#cover-spin').show();
        $.ajax({
            method: "GET",
            dataType: "text",
            url: "create_execution",
            data: {
                http_status: result["response"].status,
                mac_address: mac,
            },
            success: function (execution_record_id) {
                $('#cover-spin').hide();
                if(total == current)
                {
                    alert('Successfully created execution record");
                }
            }

        });
     }

    }

}


function call_endpoint() {


    var values = new Array();

    webpa = $('#Device-PA').is(":visible");
    rpil = $('#Device-SN').is(":visible");
    groupselect = $('#Group-Select').is(":visible");
    parameter_name = $('#tr_object').val();
    if (webpa) {

        $.each($("input[name='checkBox[]']:checked").closest("td").next("td"), function () {
            values.push($(this).text().trim())

        });
        m = values.length

    } else {
        $.each($("input[name='checkBox[]']:checked").closest("td").next("td"), function () {
            values.push($(this).text().trim())
        });
        m = values.length


    }

    serialnumber = $('#pa_serialnumber').val();
    oid = $('#sn_serialnumber').val();


    protocol = {
        pa: pa,
        sn: sn,
    }

    if (pa) {
        for (var i = 1; i <= m; i++) {
            (function () {

                var macAdd = values[i];

                $.ajax({
                        method: "GET",
                        url: "get_object",
                        dataType: "json",
                        data: {
                            parameter: parameter_name,
                            mac: macAdd,
                            protocol: protocol,
                            serialnumber: serialnumber,
                        },

                    success: function (result) {
                        console.log(result);
                        NProgress.done();
                        console.log("result for webpa");

                        display_result(m,i);
                    },

                    statusCode: {
                        404: function () {
                            console.log("Call failed");
                        }
                    }
                });
                })();

        }
   }
}

答案 1 :(得分:1)

result函数中未定义

macdisplay_resultresult似乎是从$.ajax()返回的jQuery Promise对象的结果值。不确定mac是什么缩进。

您可以将$.when()$.map()替换为for循环,return来自call_endpoint()的jQuery promise对象,包括错误处理,链{{1} }到.then()调用以执行一次call_endpoint()

alert()