我有一个名为 writeMessage 的函数。writeMessage 调用 ajax 请求来获取本地化内容。一旦从 ajax 请求返回内容,它还会在“n”秒后淡出消息。所以这一切都有效,我已经测试了许多调用,但是,我觉得它过于复杂,因为在处理 javascript 闭包语句时我不完全理解变量的范围。谁能告诉我我是否在这里跳过了太多的箍来完成以下任务。
函数getTextResource接受参数,(字符串、字符串、对象、函数)
- 'function' 参数是一个回调,在 ajax 请求完成后调用。
- 'object' 参数是一个 arguments 对象,包含有关如何以及在何处写入消息的所有详细信息。
- 'string' & 'string' 参数被传递到 ajax 请求中。
在 getTextResource 中,我正在调用一个 ajax 方法,将“object”参数作为上下文以及原始默认文本和回调函数传递 ajax 请求完成后,通过上下文,我现在调用回调函数,将结果传递给它服务调用以及参数。
如果再次调用该函数,我是否需要继续传递上下文,或者传递给 getTextResoruce 的所有内容都不会被分配不同的值?
function writeMessage(args) {
var d = $('<div></div>');
getTextResource(args.resourceId, args.message, { args: args, messageElement: d },
function (text, context) {
var args = context.args;
var d = context.messageElement;
d.empty();
d.append(text);
args.element.append(d);
if (args.fadeTimeOut > 0)
setTimeout(function () {
d.fadeOut('slow', function () {
$(this).remove();
});
}, args.fadeTimeOut);
}
);
}
var getTextResource = function (resourceId, defaultText, context, cb) {
resourceId = resourceId + '';
defaultText = defaultText + '';
if (resourceId == '') resourceId = defaultText;
if (defaultText == '') defaultText = resourceId;
try{
var request = $.ajax({
type: 'GET',
url: 'http://localhost/EaiCCM/api/' + BusinessScope.Version + '/' + BusinessScope.CampaignSegment + '/TextResource',//?' + qs,
data: {ResourceId: resourceId, DefaultText: defaultText},
cache: false,
dataType: 'json',
contentType: 'application/json; charset=utf-8',
context: { defaultText: defaultText, context: context, cb: cb }
});
request.done(function (result) {
var txt = this.defaultText;
try {
if ($.isPlainObject(result))
txt = result.Detail;
}
catch (e) {
}
finally {
if (typeof this.cb == 'function')
this.cb(txt, this.context);
}
});
request.fail(function (jqXHR, textStatus, context) {
if (typeof this.cb == 'function')
this.cb(this.defaultText, this.context);
});
}
catch (e) {
if (typeof cb == 'function')
cb(defaultText, context);
}
};