2013-01-07 21 views
7

मेरे पास ऐसे ग्राहक हैं जो AJAX कॉल जारी करते हैं। ये उन संदर्भ URL को कॉल करता है जो अलग-अलग तरफ स्प्रिंग सुरक्षा द्वारा संरक्षित हैं। यदि उपयोगकर्ता का सत्र समाप्त हो गया है, तो मेरे पास लाइटबॉक्स में लॉगिन फॉर्म पॉपअप है। उपयोगकर्ता ने सफलतापूर्वक लॉग इन करने के बाद, मैं क्लाइंट को AJAX कॉल को फिर से निष्पादित करना चाहता हूं।सफलतापूर्वक वसंत सुरक्षा लॉगिन के बाद मैं AJAX सफलता फ़ंक्शन को कैसे कॉल कर सकता हूं?

function handleSearchClick(evt) { 
    var setupOptions = { 
     success: loadSearch, 
     type: "POST", 
     dataType: "json",    
     url: "../search.ajax", 
     error: handleError, // how can I pass callback info i.e. I want to be able to execute $("#searchForm").ajaxSubmit(setupOptions); from handleError? 
     timeout: 50000 
    };     
    $("#searchForm").ajaxSubmit(setupOptions); 
} 

जब प्रमाणीकरण विफल हो, सर्वर की एक 401 जो ग्राहक handleError बुला परिणाम:

यहाँ एक AJAX कॉल करता है कि ग्राहक के पक्ष कोड का एक उदाहरण है। क्या हैरलर को संभालने के लिए कॉलबैक फ़ंक्शन पास करना संभव है? मैं कॉलबैक फिर से निष्पादित करने के लिए

$("#searchForm").ajaxSubmit(setupOptions); 

मैं इस समस्या को जहां सर्वर AJAX कॉल कि एक सत्र का समय समाप्त पर एक सफलता प्रतिक्रिया लौटाता के समाधान देखा है चाहेंगे। फिर, सफल कार्य सत्र सत्र समय जानने के जवाब में कुछ ढूंढता है। क्लाइंट फिर कॉलबैक फ़ंक्शन संग्रहीत करता है। मैं त्रुटि समारोह में इसे संभालने के लिए हालांकि पसंद करते हैं।

+0

क्या मेरे उत्तर आपके लिए काम किया? – Alex

+0

उत्तर के लिए धन्यवाद। हालांकि, नीचे दिए गए कोड में "लेकिन आप निम्न कार्य कर सकते हैं", मुझे यकीन नहीं है कि कैसे हैंडलर $ ("# searchForm") कॉल करने में सक्षम होगा। AJAXSubmit (setupOptions)। क्या आप कृपया यह बताने के लिए संपादित कर सकते हैं कि यह कैसे किया जाएगा? – James

उत्तर

3

अनुरोध द्वारा निष्पादित कर सकता है

$("#searchForm").ajaxSubmit(setupOptions); 

$.ajax(this); 

वहाँ फोन करके handleError समारोह में फिर से क्रियान्वित किया जा सकता ए में पास करने की कोई जरूरत नहीं है कॉलबैक फ़ंक्शन फिर से निष्पादित करने के लिए:

$("#searchForm").ajaxSubmit(setupOptions); 
2

मैं इसे यहाँ उल्लेख किया है: How to send a form without refreshing the page?

यह त्रुटि हैंडलर के लिए एक कॉलबैक होने के रास्ता नहीं है।

$.ajax({ 
    url: siteUrl + 'fetch/search', 
    type: "POST", 
    data: formData, 
    success: function(data) { 
     ..... 
    }, 
    error:function(x,e){ 
     if(x.status==0){ 
      alert('You are offline!!\n Please Check Your Network.'); 
     }else if(x.status==404){ 
      alert('Requested URL not found.'); 
     }else if(x.status==500){ 
      alert('Internel Server Error.'); 
     }else if(e=='parsererror'){ 
      alert('Error.\nParsing JSON Request failed.'); 
     }else if(e=='timeout'){ 
      alert('Request Time out.'); 
     }else { 
      alert('Unknow Error.\n'+x.responseText); 
     } 
    } 
}); 

लेकिन आप निम्नलिखित

function handleSearchClick(evt) { 
    var setupOptions = { 
     success: loadSearch, 
     type: "POST", 
     dataType: "json",    
     url: "../search.ajax", 
     error: handleError(x,e), // this should do it 
     timeout: 50000 
    };     
    $("#searchForm").ajaxSubmit(setupOptions); 
} 
+2

त्रुटि को किसी फ़ंक्शन का संदर्भ होना आवश्यक है। हालांकि, अंतिम कोड स्निपेट में आपके पास फ़ंक्शन का आमंत्रण है। – James

2

Closures बचाव के लिए:

function handleSearchClick(evt) { 
    var setupOptions = { 
     success: loadSearch, 
     type: "POST", 
     dataType: "json", 
     url: "../search.ajax", 
     timeout: 50000 
    }; 
    setupOptions.error = handleError(setupOptions); 
    $("#searchForm").ajaxSubmit(setupOptions); 
} 

function handleError(setupOptions) { 
    return function() { 
     // handle error 

     // then re-submit 
     $("#searchForm").ajaxSubmit(setupOptions); 
    }; 
} 

ध्यान दें कि यह एक संदर्भ लूप (setupOptions handleError द्वारा दिया त्रुटि समारोह के लिए एक संदर्भ, त्रुटि समारोह किया है बनाता है setupOptions के लिए एक संदर्भ), लेकिन यह किसी भी सभ्य ब्राउज़र द्वारा आसानी से कचरा इकट्ठा किया जाना चाहिए।

+0

धन्यवाद! यह सवाल का सही समाधान है। मुझे लगता है कि निर्मित jquery कॉल $ .ajax (यह) एक सामान्य तरीके से कई प्रकार के अनुरोधों से त्रुटियों को संभालने के लिए बेहतर होगा। मुझे एहसास नहीं हुआ कि मेरा प्रश्न पोस्ट करने के बाद तक कार्यक्षमता मौजूद थी। मैंने आपके उत्तर में +1 दिया क्योंकि यह करने का यह शानदार तरीका होगा और यदि मेरी jquery कॉल मौजूद नहीं है तो मेरी पसंद होगी। – James

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