2009-08-12 15 views
10

मैं अपना फॉर्म सबमिट करने के लिए jQuery और jQuery.form प्लगइन का उपयोग कर रहा हूं (एएसपी.नेट एमवीसी का उपयोग भी)।jQuery AJAX स्थिति 200 के रूप में पुनर्निर्देशन देखें 302?

समस्या यह है कि उपयोगकर्ता साइट के उस अनुभाग में है जो फॉर्म प्रमाणीकरण का उपयोग करता है और यदि उनकी ऑथ कुकी 302 की स्थिति वापस लेने के बजाय पृष्ठ पर अपने समय के दौरान समाप्त हो जाती है, जो लॉगिन पृष्ठ पर रीडायरेक्ट होगा, मुझे अभी भी 200 मिलते हैं?

फायरबग में मुझे 302 मिल गया और फिर मेरा लॉगिन पेज 200 के रूप में कार्य किया जाता है जो स्टेटस कोड वापस मेरे अजाक्स कॉल पर भेजा जाता है। मैं कैसे पता लगा सकता हूं कि अगर मैं कभी भी jQuery फॉर्म प्लगइन पर वापस भेजा गया 302 नहीं देखता हूं तो वे लॉग आउट हो गए हैं?

+0

आप प्रमाणन कुकी की जाँच की कोशिश की? ऐसा लगता है कि उपयोगकर्ता को लॉग इन करना है या नहीं, यह जानने के लिए कुकी को जांचना आसान होगा। – user120242

उत्तर

0

कैश के साथ प्रयास करें: झूठी cache option in jquery ajax:

$.ajax({ 
    url: "test.html", 
    cache: false, 
    success: function(html){ 
    $("#results").append(html); 
    } 
}); 

--- संपादित सी # कोड में इस के साथ प्रयास करें:

protected void Page_Load(object sender, System.EventArgs e) 
{ 
    Response.Cache.SetCacheability(HttpCacheability.NoCache); 
    ... 
} 
+0

एक ही परिणाम - मैं 302 और फिर 200 9 में फायरबग बट में 200 देखता हूं, जेएस 200 देखता है :( – Slee

+0

AJAX कॉल का पूरा यूआरएल देख सकता है –

+0

कृपया जेएस कोड यहां पूरा करें। धन्यवाद –

0

यह समाधान मैं पहले उपयोग किए गए है:

सर्वर साइड:

जब मैं यदि कोई सत्र अभी भी मान्य है देखने के लिए जाँच कर रहा हूँ, मैं भी एक आंख बाहर रखने के लिए " एक्स-अनुरोधित-साथ "हेडर, जो" XMLHttpRequest "होना चाहिए यदि आप jQuery का उपयोग कर रहे हैं (नोट: आईई निचले मामले में हेडर नाम वापस करने के लिए जाता है, तो इसके लिए भी देखें)। सत्र वास्तव में समाप्त हो गया है और शीर्ष लेख, मौजूद है बजाय एक HTTP रीडायरेक्ट का उपयोग करने का है, तो मैं इस तरह एक साधारण JSON ऑब्जेक्ट के साथ जवाब:

{ "SESSION": "EXPIRED" } 

क्लाइंट साइड:

मेरी ऑनलोड कोड में, मैं का उपयोग करें jQuery की AJAX पूर्ण घटना सत्र समाप्ति ऑब्जेक्ट के लिए सभी आने वाले अनुरोध पेलोड को जांचने के लिए। कोड इस तरह कुछ दिखता है:

$(window).ajaxComplete(function(ev, xmlhr, options){ 
    try { 
     var json = $.parseJSON(xmlhr.responseText); 
    } 
    catch(e) { 
     console.log('Session OK'); 
     return; 
    } 

    if ($.isPlainObject(json) && json.SESSION == 'EXPIRED') { 
     console.log('Session Expired'); 

     //inform the user and window.location them somewhere else 

     return; 
    } 

    console.log('Session OK'); 
}); 
0

मुझे पूरा यकीन है कि आपको XHR ऑब्जेक्ट की पूर्ण स्थिति में 302 कभी नहीं मिलेगा। यदि कोई रीडायरेक्ट होता है तो कनेक्शन तब भी प्रक्रिया में है जब तक आप लॉगिन पेज से प्रतिक्रिया नहीं देखते (जो 200 होना चाहिए, यदि यह मौजूद है)।

हालांकि, आपको 302 को देखने की आवश्यकता क्यों है? निश्चित रूप से यदि आप login.php पर रीडायरेक्ट कर रहे हैं तो वापस लौटाए गए प्रतिक्रिया के यूआरएल (या सामग्री के लिए पार्सिंग) प्राप्त करना आपको बताता है कि वे लॉग आउट हो गए हैं?

एक विकल्प, केवल तभी जब आप जानना चाहते हैं कि जैसे ही सत्र समाप्त हो गया है (कुछ कार्य करने से पहले), सर्वर को सेटटाइमआउट का उपयोग करके या प्रमाणीकरण स्थिति पर जानकारी प्राप्त करने के समान ही है।

शुभकामनाएं।

7

मुझे वास्तव में यह समाधान पसंद है। 401 पर AJAX अनुरोधों पर 302 प्रतिक्रिया को बदलकर यह आपको 401 की तलाश में किसी भी AJAX अनुरोध की निगरानी करने के लिए क्लाइंट पक्ष पर अपना AJAX सेट करने की अनुमति देता है और यदि उसे लॉगिन पृष्ठ पर रीडायरेक्ट करने के लिए कोई मिलता है। बहुत सरल और प्रभावी।

वैश्विक।asax:

protected void Application_EndRequest() 
{ 
    if (Context.Response.StatusCode == 302 && 
     Context.Request.Headers["X-Requested-With"] == "XMLHttpRequest") 
    { 
     Context.Response.Clear(); 
     Context.Response.StatusCode = 401; 
    } 
} 

क्लाइंट साइड कोड:

$(function() { 
     $.ajaxSetup({ 
     statusCode: { 
      401: function() { 
      location.href = '/Logon.aspx?ReturnUrl=' + location.pathname; 
      } 
     } 
     }); 
    }); 
संबंधित मुद्दे