2012-04-04 20 views
13

मेरे पास एक लिंक है जो एक क्रिया करने के लिए अजाक्स पोस्ट भेजता है। यदि उपयोगकर्ता अभी तक साइन इन नहीं है, तो कार्रवाई विधि लॉगिन पृष्ठ पर 302 रीडायरेक्ट लौटाती है। यदि ऐसा होता है, तो मैं रीडायरेक्ट को पकड़ना चाहता हूं, ताकि मैं लॉगिन फॉर्म को लाइटबॉक्स में प्रदर्शित कर सकूं।एक ब्लॉग के बाद एक रीडायरेक्ट का पालन करने से jQuery AJAX को कैसे रोकें?

हालांकि, ऐसा लगता है कि jQuery नियंत्रण लौटने या कॉलबैक फ़ंक्शन को कॉल किए बिना रीडायरेक्ट का पालन करता है। नीचे दिए गए कोड में, 302 रीडायरेक्ट की अलर्ट कभी नहीं कहा जाता है, और जब तक डेटाफ़ाइल फ़ंक्शन कहा जाता है, तो डेटा लॉगिन पृष्ठ की सामग्री होती है।

मैं कैसे देख सकता हूं कि पृष्ठ ने 302 रीडायरेक्ट भेजा है, और शाखा को एक अलग कार्रवाई में भेजा है?

$.ajax(url, 
     { 
      data: postArguments, 
      type : "POST", 
      success: function (data) { alert(' success function'); }, 
      statusCode: 
      { 
       302: function() { alert(' received redirect 302'); }, 
       301: function() { alert(' received redirect 301'); } 
      }, 
      dataFilter: function (data, type) { alert('got data ' + data); return data; } 
     }); 

उत्तर

11

यह jQuery के साथ एक सीमा नहीं है बल्कि जावास्क्रिप्ट के साथ ही है; जावास्क्रिप्ट में AJAX अनुरोध में रीडायरेक्ट का पता लगाने का कोई तरीका नहीं है; ब्राउज़र XHR ऑटो-जादुई रूप से ऑब्जेक्ट करता है और अदृश्य रूप से the spec के अनुसार रीडायरेक्ट का पालन करता है।

आदर्श विकल्प आपके सर्वर कोड में detect an AJAX request ("HTTP_X_REQUESTED_WITH" शीर्षलेख) में एक पकड़ जोड़ने के लिए होगा, और अपनी जावास्क्रिप्ट में एक अनाम उपयोगकर्ता का पता लगाने के लिए एक विशेष प्रतिक्रिया वापस कर देगा, और उचित तरीके से संभाल लेंगे।

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