javascript - 在 JQUERY 中延迟 | Ajax

标签 javascript jquery ajax promise jquery-deferred

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

代码......

函数

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”变量用于绑定(bind)许多下拉菜单。

服务返回 JSON OBJECT

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

注意:如果我在 AJAX 设置中添加 (async: false),则此方法有效,但这不是一个好的做法,并且会阻止我的 UI。

最佳答案

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

已更新

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
    })
});

关于javascript - 在 JQUERY 中延迟 | Ajax ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43397974/

相关文章:

javascript - 如何保存本地存储中的所有更改?

javascript - 当背景重复时,如何使用 CSS/SVG/Canvas/其他方法应用模糊背景?

javascript - Vanilla JS - 通过 div 的名称获取元素

ajax - google docs/drive 的即时编辑如何工作?

php - Ajax中需要多个独立的定时器

javascript - 扩展存储在变量中的函数

javascript - Javascript运行环境中的任务队列(宏任务队列)是一个集合数据结构吗?

javascript - 在 jquery 中使用 array.push() 中的变量

javascript - 上传时显示加载图像?

javascript - jQuery 无法将事件处理程序附加到 .load 创建的 <form>