2017-03-03 120 views
1

首先它不是另一个跨域错误线程。我正在研究一个使用两个API(主要为&备份)的简单Web应用程序从不同服务器检索相同的数据。我用的是以下模式:getJSON错误处理 - 使用2个API

//some functions and variables for DOM handling 

$.getJSON(mainUrl, function(results) { 

    //code to get and handle the data from main API 

}).fail(function() { 

    $.getJSON(backupUrl, function(results) { 

     //code to get and handle the data from backup API 

    }); 
}); 

的问题是主要的API可以在许多方面失败:

  1. 没有反应 - 如预期
  2. 因子效应我的代码工作正常,但由于与API服务器的外部问题,返回具有空属性的对象。

第二个选项很棘手,因为它不适合getJSON .fail场景。我能处理的方式是添加一个if语句来检查对象的属性不是null,将代码从backupAPI处理程序复制到检索备份源,所以它看起来是这样的:

//some functions and variables for DOM handling 

$.getJSON(mainUrl, function(results) { 

    if (results.property) { 

     //code to get and handle the data from main API 

    } else { 

     //code to get and handle the data from backup API 
    } 

}).fail(function() { 

    $.getJSON(backupUrl, function(results) { 

     //code to get the data from backup API 

    }); 
}); 

然而,本质上我有在我的main.js文件的两个地方有相同的代码块,这似乎不是一个好习惯。

难道你们能帮我正确解决这个问题,以避免在这个地方放两次相同的代码吗?谢谢。

回答

0

如何将//code to get the data from backup API放置在函数中,然后在您放置该代码的任何位置调用该函数?

你想最终像

//some functions and variables for DOM handling 

$.getJSON(mainUrl, function(results) { 

    if (results.property) { 

     //code to get and handle the data from main API 

    } else { 

     getJSONFromBackup(); 
    } 

}).fail(function() { 

    getJSONFromBackup(); 

}); 

function getJSONFromBackup(){ 
    $.getJSON(backupUrl, function(results) { 

     //code to get the data from backup API 

    }); 
} 
+0

嗯,我想这可以工作。我深入json错误处理程序,我没有注意到明显的,我的上帝...... :)谢谢 – P89