JavaScript中的回调问题

时间:2015-11-27 13:14:08

标签: javascript wcf callback

我正在尝试从函数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;
&#13;
&#13;

2 个答案:

答案 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);
}