这是一些代码。奇怪的Javascript关闭错误
function callServiceSync(url, obj) {
var result = true;
callServiceOptions(url, obj, function(res){
result = res;
alert("RESULT CB: "+JSON.stringify(result));
}, {async: false});
alert("RESULT POST-CB: "+JSON.stringify(result));
return result;
}
当它运行时,警告框说:
结果CB:{ “成功”:真正的 “数据”: “dtrombley”}
(这是什么web服务的回报,在现实中),然后输入:
结果POST-CB:真
为什么不对闭包变量的赋值工作?我误解JS如何关闭工作?我们可以调用jQuery的$ .ajax方法,它的最后一个参数选项扩展到某些默认值(在这种情况下,异步是禁用同步查询的),然后执行提供的回调。 ()
是$ .ajax()可能以某种方式执行某种方式,禁用/拧紧关闭(但是I调用cb,而不是$ .ajax()!)?如果是这样,如何解决这个问题?
为了完整(但实际上这个功能不应该能够搞砸我的想法):
function callServiceOptions(url, obj, cb, options) {
optSuccess = options.success;
optError = options.error;
opts = {}
$.extend({},options)
if (!opts.contentType) {
opts.contentType = "application/json";
}
if (!opts.dataType) {
opts.dataType = "json";
}
if (!opts.data && obj) {
opts.data = JSON.stringify(obj);
}
if (!opts.processData) {
opts.processData = false;
}
if (!opts.method) {
opts.method = "POST";
}
opts.error = function(jqXHR, textStatus, errorThrown) {
if (optError) {
optError(jqXHR, textStatus, errorThrown);
}
if (jqXHR.responseText) {
responseObj = JSON.parse(jqXHR.responseText)
if (responseObj && responseObj.message)
cb({
success: false,
message: responseObj.message
})
return
}
cb({
success: false,
message: errorThrown
});
};
opts.success = function(data, textStatus, jqXHR) {
if (optSuccess) {
optSuccess(data,textStatus,jqXHR);
}
cb(data);
};
if (url.charAt(0) == '/') {
url = url.substr(1);
}
opts.url = WEBCTX.getBaseURL() + url;
$.ajax(opts);
}
这不是任何问题,询问如何从一个异步返回值的重复事件。我有一个工作的callServiceAsync(),它可以很好地完成。我正在使用同步模式,如果你不熟悉它,请在这个问题上通过...
Quentin - 请仔细阅读该问题。我没有执行异步调用,我正在执行同步调用,并且该值从jQuery ajax()正确返回。 – BadZen
不,有一个同步查询模式,这就是我正在使用的。请阅读http://api.jquery.com/jquery.ajax/上的文档,特别是关于我正在使用的“async”选项。 – BadZen
如果它是异步的,警报不会按照该顺序返回,而是相反。 – BadZen