2012-06-06 2 views
15

запрос Этот JSON:Ручка 500 ошибок в формате JSON (JQuery)

$.ajax({ 
    url:jSONurl+'?orderID='+thisOrderID+'&variationID='+thisVariationID+'&quantity='+thisQuantity+'&callback=?', 
    async: false, 
    type: 'POST', 
    dataType: 'json', 
    success: function(data) { 
     if (data.response == 'success'){ 
      //show the tick. allow the booking to go through 
      $('#loadingSML'+thisVariationID).hide(); 
      $('#tick'+thisVariationID).show(); 
     }else{ 
      //show the cross. Do not allow the booking to be made 
      $('#loadingSML'+thisVariationID).hide(); 
      $('#cross'+thisVariationID).hide(); 
      $('#unableToReserveError').slideDown(); 
      //disable the form 
      $('#OrderForm_OrderForm input').attr('disabled','disabled'); 
     } 
    }, 
    error: function(data){ 
     alert('error'); 
    } 
}) 

В определенных обстоятельствах вернуть ошибку 500 в виде:

jQuery17205593111887289146_1338951277057({"message":"Availability exhausted","status":500}); 

Это, однако, по-прежнему полезно для меня и мне нужно иметь возможность справиться с этим правильно.

По какой-то причине, однако, когда эта ошибка 500 возвращается, моя функция ошибки не вызывается, и я просто получаю сообщение об ошибке «Внутренняя ошибка сервера NetworkError: 500» в firebug.

Как я могу справиться с этим?

+0

Является ли Firebug ошибкой и останавливает вещи до того, как jQuery может даже увидеть это ?! –

+0

Это не так, нет. Я попытался открыть firebug – Fraser

+0

Почему у вас есть «async: false»? Из документов jQuery: «Начиная с jQuery 1.8, использование async: false устарело». –

ответ

27

Пробовали ли вы statuscode обратного вызова, как

$.ajax({ 
    statusCode: { 
     500: function() { 
      alert("Script exhausted"); 
     } 
     } 
    }); 
+3

Винс тоже рекомендовал это. Я попробовал, но я все еще получаю ошибку, и jQuery не входит в функцию. – Fraser

3

Я думаю, вы могли бы поймать его, добавив это:

$.ajax({ 
    statusCode: { 
     500: function() { 
     alert("error"); 
     } 
    }, 
    url:jSONurl+'?orderID='+thisOrderID+'&variationID='+thisVariationID+'&quantity='+thisQuantity+'&callback=?', 
    async: false, 
    type: 'POST', 
    dataType: 'json', 
    success: function(data) { 
     if (data.response == 'success'){ 
      //show the tick. allow the booking to go through 
      $('#loadingSML'+thisVariationID).hide(); 
      $('#tick'+thisVariationID).show(); 
     }else{ 
      //show the cross. Do not allow the booking to be made 
      $('#loadingSML'+thisVariationID).hide(); 
      $('#cross'+thisVariationID).hide(); 
      $('#unableToReserveError').slideDown(); 
      //disable the form 
      $('#OrderForm_OrderForm input').attr('disabled','disabled'); 
     } 
    }, 
    error: function(data){ 
     alert('error'); 
    } 
}) 
+0

К сожалению, это все равно дает мне такую ​​же ошибку 500 в Firebug и не входит в функцию – Fraser

1

Я удалил DATATYPE: JSON из вызова Ajax, и я был в состоянии поймать Ошибка. В таких ситуациях мне не нужен контент возвращенного jSON; только для того, чтобы знать, что есть ошибка, возвращаемая, так что этого пока достаточно. Firebug до сих пор hissy припадок, но я, по крайней мере в состоянии выполнить некоторые действия при возникновении ошибки

$.ajax({ 
      url:'http://example.com/jsonservice/LiftieWeb/reserve?token=62e52d30e1aa70831c3f09780e8593f8&orderID='+thisOrderID+'&variationID='+reserveList+'&quantity='+thisQuantity+'&callback=?', 
      type: 'POST', 
      success: function(data) { 
       if (data.response == 'Success'){ 
        //show the tick. allow the booking to go through 
        $('#loadingSML'+thisVariationID).hide(); 
        $('#tick'+thisVariationID).show(); 
       }else{ 
        //show the cross. Do not allow the booking to be made 
        $('#loadingSML'+thisVariationID).hide(); 
        $('#cross'+thisVariationID).hide(); 
        $('#unableToReserveError').slideDown(); 
        //disable the form 
        $('#OrderForm_OrderForm input').attr('disabled','disabled'); 
       } 
      }, 
      error: function(data){ 
       alert('error'); 
      } 
     }) 
+5

Это решение для вас, но не решение, когда нам нужен JSON. У любого есть реальное решение? – jerone

3

Отъезд jqXHR Object документы. Вы можете использовать метод сбоя для фиксации любых ошибок.

Что-то вроде следующего для вашего случая:

$.post(jSONurl+'?orderID='+thisOrderID+'&variationID='+thisVariationID+'&quantity='+thisQuantity+'&callback=?') 
.done(function(data){ 
     if (data.response == 'success'){ 
      //show the tick. allow the booking to go through 
      $('#loadingSML'+thisVariationID).hide(); 
      $('#tick'+thisVariationID).show(); 
     }else{ 
      //show the cross. Do not allow the booking to be made 
      $('#loadingSML'+thisVariationID).hide(); 
      $('#cross'+thisVariationID).hide(); 
      $('#unableToReserveError').slideDown(); 
      //disable the form 
      $('#OrderForm_OrderForm input').attr('disabled','disabled'); 
     } 
     }, "json") 
.fail(function(jqXHR, textStatus, errorThrown){ 
     alert("Got some error: " + errorThrown); 
     }); 

Я также хотел бы посмотреть в пропускании строку JSON данных через почту вместо присоединения переменных запроса:

$.post(jSONurl, $.toJSON({orderID: thisOrderID, variationID: thisVariationID, quantity: thisQuantity, callback: false})) 
2

Если вы используете POST вам может использовать что-то вроде этого:

$.post('account/check-notifications') 
    .done(function(data) { 
     // success function 
    }) 
    .fail(function(jqXHR){ 
     if(jqXHR.status==500 || jqXHR.status==0){ 
      // internal server error or internet connection broke 
     } 
    }); 
Смежные вопросы