我们有一个用例,我们需要阻止Drupal的核心ajax错误处理来警告用户(我们自己处理错误报告)。之前另一位开发人员在核心ajax.js文件中注释了一行,以防止Drupal产生警报框,但我想在不触及核心的情况下处理它。
从核心,drupal.js:
/**
* Displays a JavaScript error from an Ajax response when appropriate to do so.
*/
Drupal.displayAjaxError = function (message) {
// Skip displaying the message if the user deliberately aborted (for example,
// by reloading the page or navigating to a different page) while the Ajax
// request was still ongoing. See, for example, the discussion at
// http://stackoverflow.com/questions/699941/handle-ajax-error-when-a-user-
// clicks-refresh.
if (!Drupal.beforeUnloadCalled) {
alert(message);
}
};
我目前的修复方法是覆盖Drupal.displayAjaxError函数并更改确定是否警告错误的Drupal.beforeUnloadCalled
属性:
var ajax_error_backup = Drupal.displayAjaxError;
Drupal.displayAjaxError = function (message) {
Drupal.beforeUnloadCalled = true;
ajax_error_backup(message);
};
我的问题是,这是否是一个合适的解决方案?我知道我也可以覆盖该函数并将其留空 - 耗费更少的行,而不是调用对原始函数的另一个调用(并通过在ajax_error_backup
中备份原始文件来保存我创建的对象)。
我是否添加了复杂性以保持整洁,或者我应该覆盖:
Drupal.displayAjaxError = function (message) {
//empty
};
澄清 - 希望永远不会发生这种ajax警报,所以我保持整洁/整洁的愿望与仅用空白覆盖功能之间没有功能差异 - 不存在需要的情况这个警报要成功。
提前感谢帮助这只老狗用新鲜的眼睛思考。
答案 0 :(得分:0)
在这种情况下,没有一个选项似乎明显优于另一个选项。它应该根据具体情况进行处理,在这种情况下,任何一种方法都是足够的。
我个人选择使用稍微更昂贵的方法来覆盖函数并回调它,因为我觉得它可能会更具有前瞻性:
var ajax_error_backup = Drupal.displayAjaxError;
Drupal.displayAjaxError = function (message) {
Drupal.beforeUnloadCalled = true;
ajax_error_backup(message);
};
如果Drupal将来会扩展功能,可能会有另一个我们不想覆盖的情况。
覆盖空函数将是最便宜的,但也可能有点沉重。
似乎任何一种方法都是有效的,并且最好逐案处理。