0

我有以下使用该ajaxSuccess()功能的代码。我面临的问题是每当 AJAX 请求成功完成并且 jQuery 触发the ajaxSuccess事件时所有ajaxSuccess()方法都会执行。

我认为更好的解决方案是传递回调,但我不知道如何使用它,因为我是新手。

('#drop1').on('select2:select', (e) => {
    const selectedMake = e.params.data;
    utils.emptySelect2('#drop2');
    utils.emptySelect2('#drop3');
    utils.populateSelect2(`apiURL`, '#drop2');

    $(document).ajaxSuccess(() => {
        $('#drop3').select2('close');
        $('#drop2').select2('open');
    });
});

AJAX 调用:

populateSelect2(url, element, key) {
    $.get(url)
        .done((res) => {
            if (res) {
                let data = $.map(key ? res[key] : res, (obj) => {
                    obj.text = obj.name;
                    return obj;
                });
                data = sortBy(data, 'name');

                $(element).select2({
                    placeholder: 'please enter',
                    data
                });
            }
        })
        .fail(() => {
            this.showError(`Failed to call ${url}`);
        });
}
4

4 回答 4

1

utils.populateSelect2方法内部,您将调用 ajax 调用来获取数据。在那里您可以维护成功或失败回调。如果您直接在文档对象上附加 ajaxSuccess 方法,那么对于所有连续的 ajax 调用,您的 ajaxSuccess 方法将被调用。

 $.ajax({
        url: '??',
        dataType: '??',
        success: function (data, status) {
            console.log(data.responseText);
        },
        error: function(jqXHR, textStatus, errorThrown) {
        }
    })
于 2018-10-23T10:20:39.093 回答
0

如果我理解正确,您可以执行以下操作:

('#drop1').on('select2:select', (e) => {
    const selectedMake = e.params.data;
    utils.emptySelect2('#drop2');
    utils.emptySelect2('#drop3');
    utils.populateSelect2(
        `apiURL`,
        '#drop2',
        // success callback
        (res) => console.log(res),
        // fail callback
        () => console.log(fail)
    );

    $(document).ajaxSuccess(() => {
        $('#drop3').select2('close');
        $('#drop2').select2('open');
    });
});

populateSelect2(url, element, key, success, fail) {
    $.get(url)
        .done((res) => {
            // ...

            success(res);
        })
        .fail(() => {
            // ...

            fail();
        });
}
于 2018-10-23T12:04:57.573 回答
0

jQuery ajax 调用片段。注册成功和错误回调以接收 api 响应。

$.ajax({
    type: 'GET',
    url: "https://reqres.in/api/users/2",
    dataType:"json",
    success: function(data){
            console.log("success");    
    },
    error:function(error){
        console.log("error");
    }
      });
于 2018-10-23T10:21:47.387 回答
0

当您使用 JQuery.ajaxSuccess() 时,您会“捕获”浏览器发出的所有请求。如果您特别想从一个电话中获得答案(通常是这种情况),您需要使用回调。

举个例子 :

$.ajax({
        type:"POST",
        url:"/myUrl"
        success:function(data){
            alert(data);
        }
    });

具有来自服务器的答案的“数据”参数。

PS:你可以用你想使用的任何函数替换你的成功回调

于 2018-10-23T10:14:53.683 回答