同步AJAX(破坏的承诺)

时间:2016-04-15 13:41:22

标签: javascript jquery

我正在尝试将JavaScript引入同步行为,但到目前为止我都失败了。

我已经尝试了30种或更多种不同的方法,这是基于另一个答案的最新尝试,在StackOverflow上:

function fnc () {
    $.ajax({
        type: 'GET',
        url: "libraries/resources/data.json",
        dataType: 'json',
        success: function (data) {
            ...
            objSomething = {
                ...
            };
    },
        error: function () {}
    });
}
fnc().then(function(objSomething) {
    google.maps.event.addDomListener(window, 'load', function(){ initialize(objSomething); });
}).catch(function(objSomething) {
    ...
});

然而,我收到一个错误:

  

TypeError:undefined不是对象(评估   'FNC()。然后')

我尝试过的大多数方法都会导致类似的错误。

至于谷歌地图代码,它确实有效(尽管并非总是如此,因为代码执行的异步性质。)

值得注意的是,虽然我能够从头开始编写复杂的代码,但是当谈到底层的机制时,我并不是那么精通。

我正在使用jQuery 2.2.2,通过Google API CDN。

2 个答案:

答案 0 :(得分:3)

这是您正在寻找的解决方案。

   function fnc () {
        var dfd = jQuery.Deferred();
        $.ajax({
            type: 'GET',
            url: "libraries/resources/data.json",
            dataType: 'json',
            success: function (data) {
                ...
                objSomething = {
                    ...
                };
             dfd.resolve(objSomething);
        },
            error: function (error) { dfd.reject(error); }
        });

        return dfd.promise();
    }

    $.when(fnc()).then(function(objSomething) {
        google.maps.event.addDomListener(window, 'load', function(){ 
           initialize(objSomething); 
        });
     }, function(error){
       //Handle Error
     });

答案 1 :(得分:0)

使用$.ajax功能,您可以使用then功能。请参阅以下链接:

http://wildermuth.com/2013/8/3/JavaScript_Promises