2010-01-08 25 views
6

मैंने यहां प्रश्नों की खोज की है, लेकिन मुझे jQuery की AJAX में त्रुटि प्रबंधन का उपयोग करने की अच्छी समझ नहीं है (मैं एक नोब हूं, इसलिए यह वास्तव में समझ में नहीं आता है।)jQuery AJAX त्रुटि हैंडलिंग

क्या कोई इसे शुरुआती के लिए वर्णित कर सकता है? मैं वर्तमान में AJAX के माध्यम से एक PHP स्क्रिप्ट पर जानकारी पोस्ट कर रहा हूं, लेकिन jQuery को यह पहचानने की अनुमति देना चाहता हूं कि स्क्रिप्ट से लौटाया गया डेटा एक त्रुटि या सफलता है या नहीं।

धन्यवाद! डेव

उत्तर

20

ajax कॉल से त्रुटि वापसी एक पृष्ठ लोड को सफल नहीं था से परिणाम लौटा रहा है। हो सकता है कि आपका PHP पृष्ठ एक मान्य पृष्ठ लौटाए, लेकिन नतीजों के साथ जो आप चाहते हैं। यह सफलता की वापसी के साथ संभाला जाता है। उम्मीद है कि निम्नलिखित कोड SNIPPIT में मदद मिलेगी उदाहरण देकर स्पष्ट करना ...

$.ajax({ 
    type: "POST", 
    url: "login.php", 
    data: "action=login&user=" + user + "&pass=" + pass, 
    success: function(xhr){ 
     if ((xhr == "Invalid Login") 
       || (xhr == "Invalid charaters in username.") 
       || (xhr == "Missing username or password.") 
       || (xhr == "Unknown Error")) { 
      $("#loginMessageContent").html(xhr); 
     } 
     else { 
      simplemodalClose (dialog); 
     } 
    }, 
    error: function(xhr) { 
     alert ("Oopsie: " + xhr.statusText); 
    } 
}); 
+1

बिल, यह सहायक लगता है, क्या आप मुझे एक विचार दे सकते हैं कि वास्तव में PHP स्क्रिप्ट क्या प्रतिबिंबित करेगी जो jquery को लेने की अनुमति देगी (मेरा मतलब है, मुझे लगता है कि यह "अमान्य लॉगिन" होगा, लेकिन क्या मैं उससे अधिक जानकारी भी गूंज सकता हूं?) –

+0

+1 ग्रेट उत्तर बिल! मुझे लगता है कि 'सफलता' कॉलबैक में 'xhr' पैरामीटर नाम भ्रामक है क्योंकि यह केवल डेटा ही' xhr' ऑब्जेक्ट नहीं लौटाया गया है। –

+0

डेव, आप जो कुछ भी वापस करना चाहते हैं उसे वापस कर सकते हैं, बस उस डेटा के बारे में जागरूक रहें जिसका आप उपयोग कर रहे हैं। इस उदाहरण की तरह साधारण सामान के लिए डिफ़ॉल्ट डेटा टाइप ठीक है, अधिक जटिल डेटा उपलब्ध अन्य डेटा प्रकारों को देखने के लिए। उदाहरण के लिए JSON डेटा का उपयोग करने के लिए, PHP कोड JSON डेटा भेजें। डेटा टाइप को सेट करने के तरीके को देखने के लिए $ AJAX के लिए jquery दस्तावेज़ों को देखें, JSON विधियों के लिए php दस्तावेज़ों को भी देखें। डौग, अच्छा बिंदु। – Bill

2

jQuery AJAX त्रुटि हैंडलिंग को संभालने के लिए लागू किया गया है यदि HTTP Request में कोई त्रुटि नहीं है यदि आपकी स्क्रिप्ट "त्रुटि" या "सफलता" लौट रही है। यदि सर्वर एक त्रुटि फेंकता है (उदाहरण के लिए 404 नहीं मिला या 500 सर्वर त्रुटि) तो यह jQuery के त्रुटि कार्यों को ट्रिगर करेगा। इसे कुछ तरीकों से संभाला जा सकता है, लेकिन एक अच्छा तरीका है कि एक div को दिखाए कि उपयोगकर्ता को पता है कि कोई त्रुटि हुई है।

एचटीएमएल

<div id="error" style="display: none">There was an error processing your last request</div> 

jQuery

$(function(){ 
    $("#error").ajaxError(function(){ 
     var $error = $(this); 
     $error.slideDown(500, function(){ 
      window.setTimeout(function(){ 
       $error.slideUp(500); 
      }, 2000); 
     }); 
    }); 
}); 

एक त्रुटि होती है, तो अपने "सफलता" तरीकों में से कोई भी सक्रिय होगा, और कहा कि div नीचे स्लाइड, 2 सेकंड प्रतीक्षा करें, फिर बैक अप लें।

त्रुटियों

के लिए अपनी स्क्रिप्ट का परीक्षण जैसा कि मैंने उल्लेख किया है कि आप अपने सर्वर स्क्रिप्ट "त्रुटि" या "सफलता" या कुछ इसी तरह वापस ग्राहक के लिए भेज रहा है की तरह लगता है का वर्णन किया।

आप एक $.post उपयोग कर रहे हैं, उदाहरण के लिए, अपने त्रुटि हैंडलिंग कोड इस प्रकार दिखाई देंगे:

$.post('/your/url', { save_me: true }, function(data){ 
    if(data == "error"){ 
     // handle error 
    } else { 
     // handle success 
    } 
} 
2

यह केवल 1 दृष्टिकोण है। मैं एक ऐसा एप्लिकेशन बना रहा हूं जो JSON में अपने सभी डेटा लौटाता है। अगर कोई त्रुटि है तो JSON संदेश को प्रतिबिंबित करने के लिए बदला जाता है। प्रत्येक वापसी ऑब्जेक्ट में या तो "सफलता" या "त्रुटि" की "स्थिति" होती है। यदि यह एक त्रुटि है तो JSON का "error_message" भाग है जो त्रुटि का वर्णन करता है।

मुझे उम्मीद है कि इससे मदद मिलती है।

2

भले ही यह आपकी समस्या न हो, मैं यहां से पोस्ट करूंगा क्योंकि यह संबंधित है।

हाल के JQuery v1.4 release के साथ, JSON प्रतिक्रियाएं अब मान्य हैं।क्योंकि मैं वापस आ यह मेरी एप्लिकेशन तोड़ दिया:

{success:true} 

और अब यह गलत है, यह त्रुटि हैंडलर कॉल करता है

{"success":true} // HAS to be double quotes, single won't do it 

होने के लिए आवश्यक है। आसान फिक्स लेकिन पता लगाने के लिए थोड़ा सा लिया।

संबंधित मुद्दे