我正在尝试从函数one()
执行 WCF 服务调用。只有在完成此操作后,我才希望执行函数two()
。我遇到的问题是在函数two()
完成执行并且WCF服务返回结果之前调用函数one()
。我该怎么解决这个问题?我正在使用回调函数,因此我无法弄清楚为什么,因为响应不超过3秒。
<script type="text/javascript">
var jsonGetFileResult = "";
function one(callback) {
setTimeout(function() {
//var jsonGetFileResult = "";
console.log('01: into one');
$.ajax({
type: 'GET',
url: ‘http: //wcf.google.com’, //this is the wcf call
contentType: "application/json; charset=utf-8",
dataType: 'json',
data: {},
timeout: 10000,
success: function(data) {
jsonGetFileResult = stringifyNewsletter(data);
console.log('03: ' + jsonGetFileResult);
},
error: function(data) {
alert(error);
}
});
callback();
}, 3000);
}
function stringifyNewsletter(data) {
var removeHeader = JSON.stringify(data);
var file = removeHeader.split('"');
console.log('02: ' + file[3]);
return file[3];
}
function two(linkToNewsletter) {
window.open(linkToNewsletter, '_blank', 'location=yes');
return false;
}
/* now we make use of the callback */
one(function() {
alert(jsonGetFileResult);
// "one" triggers "two" as soon as it is done, note how "two" is a parameter
two(jsonGetFileResult);
});
</script>
&#13;
答案 0 :(得分:2)
您正在调用ajax“success”函数的回调 。 $.ajax()
调用异步 - 调用将在启动HTTP请求后立即返回到您的代码,而不是等待它完成。
如果你移动线
callback();
到里面“success”处理程序,然后在 HTTP请求完成后运行。
答案 1 :(得分:0)
你需要将回调置于成功函数中:
function one(callback) {
setTimeout(function() {
//var jsonGetFileResult = "";
console.log('01: into one');
$.ajax({
type: 'GET',
url: ‘http: //wcf.google.com’, //this is the wcf call
contentType: "application/json; charset=utf-8",
dataType: 'json',
data: {},
timeout: 10000,
success: function(data) {
jsonGetFileResult = stringifyNewsletter(data);
console.log('03: ' + jsonGetFileResult);
callback();
},
error: function(data) {
alert(error);
}
});
}, 3000);
}