【发布时间】: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