2012-02-29 2 views
3

Любые ошибки, возникающие на стороне сервера (PHP), записываются в хэш и отправляются обратно на клиентскую сторону (javascript) через AJAX. Таким образом, JSON ошибок фактически доставляется в событие успеха AJAX.Возможно ли выпустить новые ошибки из события успеха Ajax?

... 
catch ($e) { 
    echo (array("error" => $e->getMessage())); 
} 

Я по существу проверить, если данные [ «ошибка»] не определено, и если нет, то я хочу, чтобы бросить новую ошибку, которая теоретически может быть пойманной в моей Try/поймать блок обволакивающей весь AJAX.

Он продолжает сообщать мне, что ошибка не открыта (через консоль Chrome). Я проверил, и данные ["error"] возвращают строку, если она определена.

Даже в самом простом виде, просто бросали новую ошибку в случае успеха, кажется, не работает, либо:

success : function(data) { 
    throw new Error("error message!"); 
} 

ответ

2

вы должны инкапсулировать свои функции успеха и ошибок на самом деле в попытке поймать блоки, чтобы быть в состоянии поймать ошибки в них. Одним из решений является создание слоя между вызовами $ .ajax, чтобы он сначала выполнял вашу собственную функцию. Например:

myajax: function(settings) { 

      // override provided success callback with try catch 
      if (settings.success){ 
       var successFunc = settings.success; 
       settings.success = function(){ 
        try{ 
         successFunc.call(arguments); 
        } 
        catch(error){ 
         console.log("An unhandled error occurred in ajax success callback: " + error); 
        } 
       }; 
      } 

      // override provided error callback with try catch 
      if (settings.error) { 
       var errorFunc = settings.error; 
       settings.error = function() { 
        try{ 
         errorFunc.call(arguments); 
        } 
        catch(error){ 
         console.log("An unhandled error occurred in ajax error callback: " + error); 
        } 
       }; 
      } 
      // else create our own basic error callback 
      else { 
       settings.error = function(jqXHR, textStatus, errorThrown) { 
        console.log("An unhandled error occurred during an AJAX call: " + errorThrown); 
       }; 
      } 


      $.ajax(settings); 
     } 
    }; 
+0

Спасибо, обрабатывая данные успеха AJAX в другой функции с помощью try/catch. – kaspnord

0

Проблема заключается в том, что сама по себе JQuery инкапсулирует части на .ajax() подпрограмм с try/catch блоков , Поэтому я предполагаю, что ваша ошибка поймает один из этих блоков.

Вы можете обойти его с помощью jQuery.error('error message!');

Ссылки: jQuery.error

+0

Я пробовал это, и ошибка все еще не попадает в мой try/catch, который инкапсулирует весь .ajax(). – kaspnord

Смежные вопросы