【问题标题】:What I'm doing wrong when trying call back function尝试回调函数时我做错了什么
【发布时间】:2018-01-18 01:18:27
【问题描述】:

我正在尝试在 javascript 中为此函数使用回调函数

function Filtering_GetSite(siteElement) {

$.ajax({

    type: "POST",
    url: "samle.asmx/f1",
    data: "",
    contentType: "application/json; charset=utf-8",
    dataType: "json",

    success: function (response) {

        var filtersitedetails = response.d;
        var appendItem = "";

        $(siteElement).empty();

        $.each(filtersitedetails, function (index, Filtering_GetSiteInfo) {

            var activeappend = "";
            var id = Filtering_GetSiteInfo.id;
            var site = Filtering_GetSiteInfo.site;

            activeappend = "<option value=" + id + ">" + site + "</option>";

            appendItem += activeappend;

        });

        $(siteElement).prepend('<option disabled="disabled" selected="selected" value="">Select Site</option>');
        $(siteElement).append(appendItem);

    },

    error: function (response) {
        alert("error in Filtering_GetSite");
    }
});
}

这就是我调用函数并尝试使用回调函数的方式

Filtering_GetSite("#txt-site-name", function () {
           alert('ok')
           Dashboard_GetAgentInfo(agentParam,agentElement);
       });

但问题是当函数完成时它不会进入警报。我该怎么做?

【问题讨论】:

  • 您没有在函数中为该回调定义参数,因此无法引用它。 function Filtering_GetSite(siteElement, callbackFn) {。因此,在函数中,您将调用它并在适当的情况下将您想要的任何内容传递给它。 callbackFn(some_data)
  • 嗯,Filtering_GetSite 没有引用它的第二个参数,这就是回调函数。

标签: javascript


【解决方案1】:

那是因为当ajax 成功调用时,您似乎没有传递并调用该方法。

首先,您必须更改Filtering_GetSite 的方法签名以接受第二个参数,在本例中为callback,然后当ajax 成功时,您只需调用它。

function Filtering_GetSite(siteElement, callback) {
   ...

   success: function() {
      ....

      callback();
   }

   ...
}

【讨论】:

    【解决方案2】:

    您尚未将回调参数设置到您的Filtering_GetSite 函数中。例如

    function Filtering_GetSite(siteElement, callback) {
    }
    

    然后您可以使用callback() 在您希望它触发的位置调用回调。例如在success 块内;

    【讨论】:

      【解决方案3】:

      这是一个包装。

      您需要为回调函数指定第二个参数

      我还添加了一个条件,因此当您省略第二个参数时,它会检查 callback 是否是一个函数,因此您可以只调用该函数 Filtering_GetSite(sample) insted of Filtering_GetSite(sample,function(){})

      function Filtering_GetSite(siteElement, callback) {
       if (typeof (callBack) == "function") {
                  callBack();
              }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-06-22
        • 1970-01-01
        • 2019-06-10
        • 2011-08-17
        • 2020-07-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多