Вопрос по jquery, json, ajax – Обработка 500 ошибок в JSON (jQuery)

18

Этот запрос JSON:

$.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, моя функция ошибок не вызывается, и я просто получаю & quot; NetworkError: 500 Internal Server Error & quot; ошибка в firebug.

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

Я выполнял вызов ajax из $ .each, который вызывал всевозможные проблемы. С тех пор я переработал это для лучшего метода и еще не удалил асинхронный: ложный Fraser
Нет, нет. Я пытался с открытым и закрытым клопом Fraser
Firebug фиксирует ошибку и останавливает работу до того, как jQuery сможет ее увидеть ?! Mike DeSimone
Почему вы должныasync: false? Из документов jQuery: «Начиная с jQuery 1.8, использование async: false устарело.» Mike DeSimone
Попробуй безasync: false, Просто удалите это; по умолчаниюtrue, Может случиться так, что код для вызоваerror функция не работает дляasync: false из-за ошибки платформы или браузера. Mike DeSimone

Ваш Ответ

5   ответов
5

Объект jqXHR Docs. Вы можете использовать метод fail для захвата любых ошибок.

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

$.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}))
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');
    }
})
Error: User Rate Limit Exceeded Fraser
3

$.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  
        }
    });
1

json из вызова ajax и смог отловить ошибку. В этих ситуациях мне, к счастью, не нужно содержимое возвращаемого jSON; только знать, что возвращается ошибка, так что пока этого будет достаточно. Firebug все еще имеет шипение, но я, по крайней мере, могу выполнять некоторые действия, когда есть ошибка

$.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 b,ooking 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');
            }
        })
Error: User Rate Limit Exceeded
27

statuscode обратный вызов, как

 $.ajax({
    statusCode: {
        500: function() {
          alert("Script exhausted");
        }
      }
   });
Error: User Rate Limit Exceeded Fraser

Похожие вопросы