[英]Deferred In JQUERY | AJAX
My Requirement is return data using "SetUnit()" function but this function is contain async AJAX services so i am using Deferred suggested in this ( http://jsfiddle.net/b69ubLa0/21/ ) link. 我的要求是使用“ SetUnit()”函数返回数据,但是此函数包含异步AJAX服务,因此我正在此( http://jsfiddle.net/b69ubLa0/21/ )链接中建议使用Deferred。 but this is not working on my requirement. 但这不能满足我的要求。
Code...... 码......
Function 功能
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();
}
Call Function 1 通话功能1
var oUNIT_NAME = SetUnit(query).done(function (data) { return data; });
Call Function 2 通话功能2
var oUNIT_NAME = SetUnit(query);
call function using 2 style. 调用函数使用2种样式。
And This "oUNIT_NAME" var is using for binding many drop downs. 并且此“ oUNIT_NAME”变量用于绑定许多下拉列表。
Services Return JSON OBJECT 服务返回JSON对象
[{id:1,name:a},{id:1,name:a},{id:1,name:a},{id:1,name:a}]
Note : this is working if i am add (async: false) in AJAX setting but this not a good practice and this block my UI. 注意:如果我在AJAX设置中添加(async:false),则此方法有效,但这不是一个好习惯,这会阻塞我的UI。
I hope this helps. 我希望这有帮助。 I'm not a pro about deferred objects but i believe this does what you need. 我不是延迟对象的专家,但是我相信这可以满足您的需求。
updated 更新
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.