gpt4 book ai didi

javascript - 在 JQUERY 中延迟 | Ajax

转载 作者:行者123 更新时间:2023-12-03 04:33:23 25 4
gpt4 key购买 nike

我的要求是使用“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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com