【问题标题】:Deferred In JQUERY | AJAX在 JQUERY 中延迟 |阿贾克斯
【发布时间】:2017-09-09 21:54:35
【问题描述】:

我的要求是使用“SetUnit()”函数返回数据,但此函数包含异步 AJAX 服务,因此我使用此 (http://jsfiddle.net/b69ubLa0/21/) 链接中建议的延迟。但这不符合我的要求。

代码......

功能

function SetUnit(query) {
            var $q = new $.Deferred();
            var oData = [];
            var filter = JSON.stringify({ 'param': query });
            $.ajax({
                type: "POST",
                url: '../WebService.asmx/ExecuteReader',
                contentType: "application/json; charset=utf-8",
                data: filter,
                dataType: "json",
            }).fail(function (jqXHR, textStatus, errorThrown) {
                $q.reject(jqXHR, textStatus, errorThrown);
            }).done(function (data, textStatus, jqXHR) {
                return $q.resolve(data);
            });
            return $q.promise();
        }

调用函数 1

var oUNIT_NAME = SetUnit(query).done(function (data) { return data; });

调用函数2

 var oUNIT_NAME = SetUnit(query);

调用函数使用 2 样式。

并且这个“oUNIT_NAME”变量用于绑定许多下拉菜单。

服务返回 JSON 对象

[{id:1,name:a},{id:1,name:a},{id:1,name:a},{id:1,name:a}]

注意:如果我在 AJAX 设置中添加 (async: false),这是可行的,但这不是一个好习惯,这会阻止我的 UI。

【问题讨论】:

  • 您已经成功地在变量oUNIT_NAME 中存储了一个promise,但是您似乎希望oUNIT_NAME 保存一个已解析的值,而不是一个promise 对象,对吗?解决方案是在done 回调中设置oUNIT_NAME。这可能是 How do I return the response from an asynchronous call? 的副本
  • 查看更多详细信息我正在更新我的代码但仍然无法正常工作... URL:github.com/mistic100/jQuery-QueryBuilder/issues/466。请帮忙。
  • 您的“调用函数 1”示例是否运行?也就是说:如果您执行SetUnit(query).done(function (data) { alert(data); });,该值是否会收到警报?如果是这样,您只需要在回调中完成所有工作,或者在从回调中调用的另一个函数中完成。
  • 感谢 - 问题已解决感谢支持。请推荐最好的回调和“延迟”tuts网站。
  • 因为$.ajax 返回Promise,所以不需要$.Deferred

标签: javascript jquery ajax promise jquery-deferred


【解决方案1】:

我希望这会有所帮助。我不是延迟对象的专家,但我相信这可以满足您的需求。

更新

Working Fiddle

var oUNIT_NAME = {};
function SetUnit(query) {
    var $q = new $.Deferred()
    $q.promise(oUNIT_NAME);
    oUNIT_NAME.done(function(data) {
        //Bind your dropdowns
        alert(JSON.stringify(data));
    }).fail(function(jqXHR, textStatus, errorThrown) {
        //Alert user
        alert(errorThrown);
    });
    var oData = [];
    var filter = {
        json: JSON.stringify({
            data: query
        })
    };
    return $.ajax({
        cache: false,
        type: "POST",
        url: '/echo/json/',
        data: filter,
        dataType: "json"
    }).fail(function(jqXHR, textStatus, errorThrown) {
        $q.reject(jqXHR, textStatus, errorThrown);
    }).done(function(data, textStatus, jqXHR) {
        $q.resolve(data);
    });
}

SetUnit({
    param: 123
})
$("button").click(function() {
    SetUnit({
        param: 456
    })
});

【讨论】:

  • 谢谢——这对我真的很有帮助,非常感谢你的帮助...
  • 对不起 - 我是 Stackoverflow 的新手。如何接受答案。这对我很有帮助....
  • //(此代码适用于创建基于 AJAX ASYNC 的插件 PLEAE SUGGECT)$.fn.Set_DDL_Data = function (query) { var filter = JSON.stringify({ 'param': query }) ; return $.ajax({ type: "POST", url: '../WebService.asmx/ExecuteReader', contentType: "application/json; charset=utf-8", data: filter, dataType: "json", } ).fail(function (jqXHR, textStatus, errorThrown) { $q.reject(jqXHR, textStatus, errorThrown); }).done(function (data, textStatus, jqXHR) { $q.resolve(data.d); } ); $q.promise(); };
猜你喜欢
  • 1970-01-01
  • 2010-10-11
  • 1970-01-01
  • 1970-01-01
  • 2018-05-15
  • 2018-07-04
  • 1970-01-01
  • 2014-07-01
  • 2023-03-21
相关资源
最近更新 更多