0

所以我有一些代码可以获取一个 json 文件,然后它将它传递给一个引导页面,该页面将我的应用程序启动

所以我有一个函数可以获取文件并返回一个回调

function makeCorsRequest(method, url, callbackFunction)
        {
            if ($.browser.msie && window.XDomainRequest) {
                var xdr = new XDomainRequest();
                xdr.open(method, url);
                xdr.onload = function() {
                    var JSON = $.parseJSON(xdr.responseText);
                    if (JSON == null || typeof (JSON) == 'undefined')
                    {
                        JSON = $.parseJSON(data.firstChild.textContent);
                    }
                    window[callbackFunction](JSON);
                };
                xdr.onprogress = function() {};
                xdr.send();
            } else {
                var promise = $.ajax({
                    url: url,
                    method: method,
                    dataType: 'json'
                });

                $.when(promise).then(function(result) {
                    window[callbackFunction](result);
                });
            }
        }

然后是一些调用它的代码

$(document).ready(function() {           
   makeCorsRequest('GET', '/data/data.json', 'processData');
});

这有效,当返回 json 时运行 processData,但是当无法加载 json 并且 processData 没有运行时,我需要一些错误处理来处理..

有什么好方法可以做到这一点?

4

2 回答 2

2

无需使用$.when->$.then因为您可以使用 .done() 和 .fail() 提供的回调promise

promise.done(function (result) {
    //success callback
    window[callbackFunction](result);
}).fail(function(){
    //error callback
});
于 2013-09-03T04:23:53.343 回答
0
 function makeCorsRequest(method, url, callbackFunction)
        {
            if ($.browser.msie && window.XDomainRequest) {
                var xdr = new XDomainRequest();
                    if (xdr) {

                        xdr.open(method, url);
                        xdr.onerror = function() { alert("Data cannot be loaded at this time. Please ensure there are not ad blockers enabled.");};
                        xdr.onload = function() {
                            var JSON = $.parseJSON(xdr.responseText);

                            if (JSON == null || typeof (JSON) == 'undefined')
                            {
                                JSON = $.parseJSON(data.firstChild.textContent);
                            }                   
                            window[callbackFunction](JSON);
                        };
                        xdr.onprogress = function() {};
                        xdr.send();
                    }
            } else {
                var promise = $.ajax({
                    url: url,
                    method: method,
                    dataType: 'json'
                });

                promise.done(function (result) {
                    window[callbackFunction](result);
                }).fail(function(){
                    alert("Data cannot be loaded at this time. Please ensure there are not ad blockers enabled.");  
                });


            }
        }
于 2013-09-03T06:43:11.640 回答