簡體   English   中英

在JQUERY中延遲| AJAX

[英]Deferred In JQUERY | AJAX

我的要求是使用“ 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”變量用於綁定許多下拉列表。

服務返回JSON對象

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

注意:如果我在AJAX設置中添加(async:false),則此方法有效,但這不是一個好習慣,這會阻塞我的UI。

我希望這有幫助。 我不是延遲對象的專家,但是我相信這可以滿足您的需求。

更新

工作小提琴

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM