2011-03-24 14 views
13

मैं क्रोम में परीक्षण, ऐप इंजन ऐप के लिए कुछ GET अनुरोध कर रहा हूं। जब तक मैं जावास्क्रिप्ट कंसोल में देख सकता हूं कि कुछ कॉल 500 सर्वर त्रुटि में परिणाम देती हैं, तो मुझे लगता है कि इस तरह की त्रुटि को मेरे jQuery कोड में कैप्चर करने के बावजूद कई समान एसओ धागे पढ़ने के बावजूद नहीं मिल रहा है। मैं समझता हूं कि यह एक सर्वर साइड त्रुटि इंगित करता है, लेकिन मैं अभी भी अपने जावास्क्रिप्ट से ऐसी त्रुटि को कैप्चर करने में सक्षम होना चाहता हूं।jquery AJAX 500 स्थिति त्रुटि को अनदेखा करता है

मुझे त्रुटि को कैप्चर करने की आवश्यकता है ताकि मैं प्रतिक्रियाओं की संख्या (सफल या अन्यथा) की गणना कर सकूं और सभी कॉल प्रतिक्रिया प्राप्त होने पर एक और फ़ंक्शन ट्रिगर कर सकूं।

क्रोम कंसोल आउटपुट:

GET http://myapp.com/api?callback=jQuery12345&params=restOfParams 500 (Internal Server Error) 

मेरे कॉल:

statusCode: {500: function() {alert('err');}} 
कॉल करने के लिए

: जोड़ना
:

function makeCall() { 
    var count = 0; 
    var alldata = $('#inputset').val(); 
    var rows = alldata.split('\n'); 
    var countmatch = rows.length; 
    for (i=0;i<rows.length;i++) { 
     data["param"] = rows[i]["val"]; 
     $.ajax({ 
       url: apiUrl, 
       type: 'GET', 
       data: data, 
       dataType: 'jsonp', 
       error: function(){ 
        alert('Error loading document'); 
        count +=1; 
       }, 
       success: function(responseJson) { 
          count +=1; 
          var res = responseJson.results; 
          if (count == countmatch) { 
           allDoneCallback(res); 
          } 
         }, 
      }); 
    } 
} 

मैं निम्न में से कुछ की कोशिश की है।

का उपयोग करना:

$().ready(function(){ 
    $.ajaxSetup({ 
     error:function(x,e) { 
      if(x.status==500) { 
       alert('Internel Server Error.'); 
      } 
      } 
     }); 
    }); 

किसी को कैसे मैं 500 प्रतिक्रिया पकड़ सकते थे के बारे में एक सुझाव है चाहेंगे?

धन्यवाद ओली

अद्यतन:

प्रतिक्रियाओं के आधार पर, मेरी jQuery कोड सही प्रतीत होता है, लेकिन कुछ कारणों से यह केवल मेरे ऐप्स से प्राप्त कुछ 500 प्रतिक्रियाओं को पकड़ने होगा। यह संभावित रूप से एक समस्या है कि ऐप इंजन त्रुटि कैसे देता है (मुझे इसके बारे में बहुत कुछ पता नहीं है), या jquery jsonp के साथ त्रुटियों को कैसे संभालता है - इस बिंदु पर this आलेख के अंतिम अनुच्छेद में संक्षेप में चर्चा की गई है।

मुझे यह jquery-isonp का उपयोग करके काम करने के लिए मिला, जिसने ऐप द्वारा फेंक दी गई सभी 500 स्थिति को पकड़ा।

+0

क्या यह 'स्थिति' के बजाय 'स्थिति कोड' नहीं होना चाहिए? –

उत्तर

4

ऐसा लगता है कि आप jQuery के document.ready का सही ढंग से बाध्यकारी उपयोग नहीं कर रहे हैं। $().ready(...) संस्करण अधिक या कम बहिष्कृत है। इससे पहले कि अब यह सही सर्वर प्रतिक्रिया पर .error() कहना शुरू कर दिया (-

$(function() { 
    $.ajaxSetup({ 
     error: function(x, e) { 
      if (x.status == 500) { 
       alert('Internel Server Error.'); 
      } 
     } 
    }); 
}); 
+0

हाय मैट, मेरे पास वापस आने के लिए धन्यवाद। मैंने उन दोनों सुझावों की कोशिश की लेकिन अभी भी दुर्भाग्य से कोई भाग्य नहीं है .. यह अजीब बात है, मुझे आश्चर्य है कि क्रोम कंसोल 500 स्थिति को पहचान रहा है, लेकिन jquery किसी कारण से नहीं है? मैं jquery 1.5.1 का उपयोग कर क्रोम 10.0.648.151 में हूं। मैं अब एफएफ में इसका परीक्षण करूंगा। – oli

+0

मुझे आपके कोड के साथ कुछ भी गलत नहीं दिख रहा है - 'त्रुटि' कॉलबैक लिखित के रूप में काम करना चाहिए। क्या आप एक [एसएससीसीई] पोस्ट कर सकते हैं (http://sscce.org/)? –

+0

हाय मैट, दुर्भाग्य से मैं अभी नहीं कर सकता (जिस ऐप को मैं कॉल कर रहा हूं वह आंतरिक रूप से एक कंपनी के पास है); हालांकि, मुझे लगता है कि मैंने इस मुद्दे को थोड़ा और अलग करने में कामयाब रहा है: [ऐप इंजन] (http://code.google.com/appengine/docs/python/tools/webapp/redirects.html) ऐप 500 लौटाता है यह आंतरिक रूप से एक त्रुटि हिट करता है (jquery यह पता नहीं लगाता है); अगर मैं इसका स्वयं का उपयोग करता हूं। आतंक (500) कार्यक्षमता, jquery इसे पहचानता है। जहां तक ​​मैं ब्राउज़र में देख सकता हूं, वही बात वापस आती है, इसलिए मुझे अभी भी यह नहीं पता कि क्यों सही ढंग से पहचाना जाता है। – oli

1

1.9.1 2.1.1 करने से jQuery अपग्रेड करके समस्या हल: इन के बजाय एक का प्रयास करें:

$(document).ready(function() { 
    $.ajaxSetup({ 
     error: function(x, e) { 
      if (x.status == 500) { 
       alert('Internel Server Error.'); 
      } 
     } 
    }); 
}); 

या the shorthand यह 500 प्रतिक्रिया को अनदेखा कर देगा और टाइमआउट खत्म होने तक प्रतीक्षा करेगा)।

सीमा: jQuery 2.1.1 (IMO के रूप में करना चाहिए आप नहीं) IE8 और नीचे का समर्थन नहीं करता

1

मैं एक ऐसी ही समस्या थी, मैं .done, .fail, .always के jQuery के वादा फ़ंक्शन का उपयोग किया गया था, और अगर मुझे 500 आंतरिक सर्वर त्रुटि का सामना करना पड़ा तो यह किसी भी फ़ंक्शन को नहीं चलाएगा (किया गया, असफल, हमेशा, त्रुटि)। बहुत अजीब।

अंत में मैंने .ajax विकल्पों में एक टाइमआउट जोड़ा, जब यह टाइमआउट हिट करता है तो यह एक त्रुटि फेंकता है और .fail विधि भी चलाता है।

searchify.myAjaxSearchTerms = $.ajax({ 
         'url': url, 
         type: "GET", 
         'dataType': 'jsonp', 
         'jsonp': 'json.wrf', 
         'jsonpCallback': searchify.cbFunc, 
         timeout: 4000, //needed for 500 errors - will go to fail block on timeout 
         beforeSend: searchify.beforeSendAutocomplete 

        }); 
searchify.myAjaxSearchTerms.fail(function(XHR, status, error){ 
         searchify.clearForm(); 
         searchify.renderWarningForNoQuery('<div class="notify-bubble"><span class="icon" data-icon="8" aria-hidden="true"></span><span>Sorry. We had a problem performing that search...<br/>Please try again<br/>Enter a <strong>product name</strong>, <strong>catalogue number</strong> or <strong>keyword</strong></span></div>'); 
        }); 
संबंधित मुद्दे