【问题标题】:Extend ajax .done scope to wrapping function将 ajax .done 范围扩展到包装函数
【发布时间】:2014-12-25 23:42:25
【问题描述】:

我知道这可能被认为是重复的,但我在下面找不到我的函数的解决方案:

    function countNoFilters(keyword){

    keyword = typeof keyword !== 'undefined' ? keyword : "keyword="+$("#keyword-hidden").val();

    var getResults = $.ajax({
        type:"GET",
        url:"",
        data:keyword

    });

    getResults.done(function(data){
        var results = $(data).find(".class").length;
        return results;
    });
} 

如何让我的函数 'countNoFilters("keyword")' 返回 从 .done 函数 内部的返回值?如果有人可以为我的特定功能编写一个工作示例,那就太好了。

【问题讨论】:

  • 不能返回异步函数的结果,这就是为什么这是"How to return the response from an Ajax call"的重复,这个问题告诉你应该怎么做,而不是怎么做这是你想要的方式,因为这是不可能的,唯一的选择是让它同步,这不是一个真正可行的选择。
  • 感谢@adeneo 提供了很棒的主题链接......我将重组我的代码

标签: javascript ajax scope return


【解决方案1】:

我不确定这是否是您想要的,但您可以使用函数变量并在 done 函数中设置 gresult 变量,该变量将在 countNoFilters 函数的末尾返回:

function countNoFilters(keyword){

    var gresult;

    keyword = typeof keyword !== 'undefined' ? keyword : "keyword="+$("#keyword-hidden").val();

    var getResults = $.ajax({
        type:"GET",
            url:"",
            data:keyword

        });

    getResults.done(function(data){
            var results = $(data).find(".class").length;
            gresult = results;
        });

    return gresult;
} 

【讨论】:

  • gresult 在调用函数 countNoFilters() 时未定义;与 te .done 范围有关...
【解决方案2】:

您需要设置 async:false。请运行以下函数:

函数countNoFilters(关键字){ 变量 gresult; 关键字 = typeof 关键字!== '未定义' ?关键字 : "keyword="+$("#keyword-hidden").val(); var getResults = $.ajax({ 类型:“获取”, 网址:“”, 数据:关键字, 异步:假 }); getResults.done(函数(数据){ var 结果 = $(data).find(".class").length; gresult = 结果; }); 返回结果; }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-17
    • 2020-08-05
    • 1970-01-01
    • 2018-11-29
    • 1970-01-01
    相关资源
    最近更新 更多