2011-12-14 15 views
5

मैं कुछ अजाक्स को एक नियंत्रक को कॉल करने की कोशिश कर रहा हूं जो JSON के साथ प्रतिक्रिया करता है।रेल रेंडर JSON - सत्र खो गया?

if session[:user] 
    render :json => "Some Data" 
else 
    render :json => "You are not logged in" 
end 

पहली बार इस कार्रवाई एक authed उपयोगकर्ता सब कुछ से बुलाया जाता है ठीक है और session[:user]!= nil है। इसे दूसरी बार कहा जाता है यह nil है!

तो ऐसा लगता है जैसे रेल render :json जैसे ही सत्र समाप्त हो रहा है। मुझे पता चला कि पहली कॉल रेल के भीतर *_session -कुकी एक नए के साथ ओवरराइड करता है। चूंकि उस रेल के परिणाम प्रारंभिक, शेड, सत्र के बारे में नहीं जानते हैं।

यदि मैं जेएसओएन के रूप में प्रतिक्रिया प्रस्तुत नहीं करता सब कुछ ठीक काम करता है।

जेएसओएन प्रस्तुत पृष्ठों में सामान्य सत्रों में समान सत्र निर्धारित करने के लिए रेल को कैसे मजबूर किया जाए?

+0

की कोशिश की जरूरत नहीं है, तो इसके बारे में कई ट्यूटोरियल - अभी भी एक ही समस्या है – gorootde

उत्तर

8

के बाद खोज के छ: दिन मैं अंत में इसे बनाया:

रेल की तरह लगता है लापता X-CSRF-Token हैडर की वजह से सत्र को नष्ट कर देता। मैं JQuery के ajaxSend हुक में अब इस हेडर को जोड़े हूँ:

$(document).ajaxSend(function(e, xhr, options) { 
    var sid = $("meta[name='csrf-token']").attr("content"); 
    xhr.setRequestHeader("X-CSRF-Token", sid); 
}); 

यह रूप में अब उम्मीद काम कर रहा है।

1

मैं डाल कि beforeSend विधि में:

function goAjax(urlAddress,dataObject,successFunction,errorFunction){ 
     $.ajax({ 
       type: "POST", 
       url: urlAddress, 
       beforeSend: function (xhr) { 
        xhr.setRequestHeader("X-CSRF-Token", $('meta[name=csrf-token]').attr('content')); 
       }, 
       dataType: "json", 
       contentType: "application/json; charset=utf-8", 
       processData: false, 
       data: JSON.stringify(dataObject), 
       context: document.body, 
       success: function(data,status){ successFunction(data,status);}, 
       error: function(data,status){ errorFunction()} 
     }); 
    } 

अच्छा काम करता है आप (इस तरह से आप सभी ajax अनुरोध करने के लिए beforeSend जोड़ना चाहिए) ajax अनुरोध के अन्य तरीके से उपयोग करने के लिए

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