AJAX

2013-02-20 14 views
6

के साथ रेल में एक फॉर्म स्वत: सहेजना मैं पोस्ट # नई कार्रवाई के लिए एक फॉर्म स्वत: सहेजने की कोशिश कर रहा हूं। हर मिनट या तो, मैं पोस्ट # ऑटोसेव पर पोस्ट करना चाहता हूं और फिर मैं first_or_create की जांच करूंगा और पोस्ट टेबल में रिकॉर्ड को सहेज/अपडेट करूँगा। मेरी समस्या हालांकि है, मैं अब फॉर्म से पोस्ट पैराम तक नहीं पहुंच सकता। मैं बहुत की तरह यह करने के लिए कोशिश कर रहा हूँ: कार्रवाई और: नियंत्रकAJAX

post 'posts/autosave', as: :autosave_post_path 

समस्या है, सर्वर लॉग के रूप में केवल युक्त पैरामीटर हैश पता चलता है:

$(function() { 
    if ($("#new_post").length > 0) { 
    setTimeout(autoSavePost, 60000); 
    }  
}); 

function autoSavePost() { 
    $.ajax({ 
    type: "POST", 
    url: "/posts/autosave", 
    dataType: "script", 
    success: function(data) { 
     console.log(data); 
    } 
    }); 
    setTimeout(autoSavePost, 60000); 
} 

मैं इस मार्ग की है। मैं POST डेटा के हिस्से के रूप में क्या भेजा गया था इसके समतुल्य तक कैसे पहुंच सकता हूं।

उत्तर

12

आप data परम के साथ-साथ पारित करने के लिए, serialize विधि के माध्यम से की जरूरत है:

$.ajax({ 
    type: "POST", 
    url: "/posts/autosave", 
    data: $("#new_post").serialize(), 
    dataType: "script", 
    success: function(data) { 
    console.log(data); 
    } 
}); 
+0

आप आदमी कर रहे हैं! बहुत बहुत धन्यवाद। मैंने आपके द्वारा लिंक किए गए दस्तावेज़ों को देखा, मैं स्पष्ट नहीं हूं कि यह वास्तव में क्या कर रहा है, किसी भी मौके पर आपको गहराई से समझ हो सकती है कि आप सारांशित कर सकते हैं? एक बार फिर धन्यवाद। – mackshkatz

+2

".serialize() विधि मानक यूआरएल-एन्कोडेड नोटेशन में एक टेक्स्ट स्ट्रिंग बनाता है।", यानी यह फॉर्म सामग्री को 'param1 = value1 और param2 = value2 और ... और paramN = valueN' के रूप में क्रमबद्ध करता है, फिर रेल इसे ऑब्जेक्ट पर वापस बेकार कर देता है । – moonwave99

+1

@mackshkatz आप अपने फॉर्म में सभी फॉर्म तत्वों पर लूपिंग के रूप में serialize के बारे में सोच सकते हैं और डेटा को इकट्ठा कर सकते हैं जो एक लंबी स्ट्रिंग में सबमिट किया जाएगा। इसके बाद आपके रेल नियंत्रक को POST अनुरोध में भेजा जाता है। यदि यह एक GET अनुरोध था, तो यह फ़ॉर्म फ़ील्ड में दर्ज मानों के आधार पर आपके लिए क्वेरी स्ट्रिंग बनाने के बराबर होगा। – ChrisC

1

serialize() फ़ंक्शन पर एक नज़र डालें: http://api.jquery.com/serialize/: आप पैरामीटर के रूप में अपने नियंत्रक को पास करने के लिए डेटा की एक सरणी बनाने के लिए इसका उपयोग कर सकते हैं।