2012-06-06 5 views
15

Diese JSON Anfrage:Griff 500 Fehler in 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'); 
    } 
}) 

Unter bestimmten Umständen wird ein 500-Fehler in Form bringen: Dies ist jedoch

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

ist mir immer noch nützlich und ich muss in der Lage sein, damit richtig umzugehen.

Aus irgendeinem Grund, wenn dieser 500 Fehler zurückgegeben wird, wird meine Fehlerfunktion nicht aufgerufen und ich bekomme nur einen Fehler "NetworkError: 500 Internal Server Error" in Firebug.

Wie kann ich damit umgehen?

+0

Ist Firebug greift den Fehler und stoppt Dinge vor jQuery kann Siehst du es auch ?! –

+0

Es ist nicht, nein. Ich habe es mit offenem und geschlossenem Feuerwächter probiert. – Fraser

+0

Warum hast du 'async: false'? Aus den jQuery-Dokumenten: "Ab jQuery 1.8 ist die Verwendung von async: false veraltet." –

Antwort

27

Haben Sie versucht, statuscode Rückruf wie

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

Vince empfahl das. Ich habe es versucht, aber ich bekomme immer noch den Fehler und jQuery tritt nicht in die Funktion ein. – Fraser

3

Ich glaube, Sie es dies, indem fangen können:

$.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

Leider gibt mir das immer noch den gleichen 500 Fehler in Firebug und geht nicht in die Funktion – Fraser

1

ich den Datentyp entfernt: json aus dem Ajax-Aufruf und ich war in der Lage zu fangen der Fehler. In diesen Situationen brauche ich zum Glück nicht den Inhalt des zurückgegebenen jSON; Nur um zu wissen, dass ein Fehler zurückgegeben wird, wird dies jetzt ausreichen. Firebug hat noch einen hissy aber ich bin zumindest der Lage, einige Aktionen auszuführen, wenn ein Fehler auftritt

$.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

Dies ist eine Lösung für Sie, aber keine Lösung, wenn wir JSON benötigen.Jeder hat eine echte Lösung? – jerone

3

Sehen Sie sich die jqXHR Object docs. Sie können die Fehlermethode verwenden, um Fehler zu erfassen.

So etwas wie die folgenden für Ihren Fall:

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

ich auch in Leiten eines json Datenfolge per Post statt Anbringen Query-Variablen aussehen:

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

Wenn Sie mit POST Sie kann so etwas verwenden:

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