2011-05-30 6 views
9

मेरे पास data-remote="true" विशेषता वाला एक अजाक्स फ़ॉर्म है जिसे मैं रेल में नियंत्रक को सबमिट कर रहा हूं।मैं रेल में jquery-ujs पोस्ट अनुरोध में डेटा कैसे जोड़ूं?

मैं क्या करना चाहता हूं jquery-ujsevent system का उपयोग सर्वर से भेजे जाने से पहले अनुरोध में डेटा जोड़ने के लिए करना है।

कुछ इस तरह:

$("#my_form").bind('ajax:beforeSend', function(xhr, settings){ 
    // serialize some object and append it 
}); 

मैं समझ नहीं कैसे वास्तव में हालांकि आंकड़ों पर टैग करने के लिए?

संपादित करें यह 'xhr' ऑब्जेक्ट कंसोल में जैसा दिखता है।

f.Event 
currentTarget: DOMWindow 
data: undefined 
exclusive: undefined 
handleObj: Object 
handler: function N(a){var b,c,d,e,g,h,i,j,k,l,m,n,o,p=[],q=[],r=f._data(this,"events");if(!(a.liveFired===this||!r||!r.live||a.target.disabled||a.button&&a.type==="click")){a.namespace&&(n=new RegExp("(^|\\.)"+a.namespace.split(".").join("\\.(?:.*\\.)?")+"(\\.|$)")),a.liveFired=this;var s=r.live.slice(0);for(i=0;i<s.length;i++)g=s[i],g.origType.replace(y,"")===a.type?q.push(g.selector):s.splice(i--,1);e=f(a.target).closest(q,a.currentTarget);for(j=0,k=e.length;j<k;j++){m=e[j];for(i=0;i<s.length;i++){g=s[i];if(m.selector===g.selector&&(!n||n.test(g.namespace))&&!m.elem.disabled){h=m.elem,d=null;if(g.preType==="mouseenter"||g.preType==="mouseleave")a.type=g.preType,d=f(a.relatedTarget).closest(g.selector)[0],d&&f.contains(h,d)&&(d=h);(!d||d!==h)&&p.push({elem:h,handleObj:g,level:m.level})}}}for(j=0,k=p.length;j<k;j++){e=p[j];if(c&&e.level>c)break;a.currentTarget=e.elem,a.data=e.handleObj.data,a.handleObj=e.handleObj,o=e.handleObj.origHandler.apply(e.elem,arguments);if(o===!1||a.isPropagationStopped()){c=e.level,o===!1&&(b=!1);if(a.isImmediatePropagationStopped())break}}return b}} 
jQuery16103879226385615766: true 
liveFired: HTMLDocument 
namespace: "" 
namespace_re: /(^|\.)(\.|$)/ 
result: undefined 
target: HTMLFormElement 
timeStamp: 1306788242911 
type: "ajax:beforeSend" 
__proto__: Object 
+0

आप किस jQuery संस्करण के साथ काम कर रहे हैं? –

+0

मैं jquery 1.6.1 –

+0

का उपयोग कर रहा हूं जैसे आपका पोस्ट खाली है –

उत्तर

17

मैं इस एक बाहर अपने आप को अंत में लगा की कोशिश करो। ऐसा लगता है कि docs के बावजूद, ajax:beforeSend हुक वास्तव में तीन तर्क लेता है। this helpful blog post के अनुसार वे event, xhr और settings उस क्रम में हैं।

मैं जो फॉर्म डेटा ढूंढ रहा था वह datasettings तर्क की विशेषता में है।

तो मूल रूप से, मैं अब डेटा अनुरोध करने के लिए समारोह

$("#my_form").bind('ajax:beforeSend', function(event, xhr, settings){ 
    settings.data += "&serialized=data"; 
}); 

और अतिरिक्त paramaters के साथ जोड़ने के सर्वर पर उपलब्ध हो जाएगा कर सकते हैं।

+2

फ़ायरबग में मैं 'शून्य और url = http: // www.google.com' देखता हूं लेकिन सर्वर की तरफ मुझे नहीं लगता कि' पैरामीटर्स: {"user_id" => "13"} ' – lulalala

+0

@ लुलालाला मैं भी देख रहा हूं वही चीज। जब मैं ** console.log (सेटिंग्स) ** मैं देखता हूं कि ** डेटा: "शून्य और कस्टमाइज़ = टेस्ट" ** और कस्टमाइज़्म परम जारी नहीं रहता है। मैं ** का उपयोग कर रहा हूं। ("AJAX: beforeSend", "#link", फ़ंक्शन (ई, xhr, सेटिंग्स) {settings.data + = "और कस्टमाइज़ करें = टेस्ट"} ** –

+0

डेटा डिफ़ॉल्ट नहीं होने पर शून्य डिफ़ॉल्ट मान है , आप 'settings.data =" serialized = data "लिख सकते हैं, लेकिन शायद यह काम नहीं करेगा। इसके बजाय 'settings.url + =' और dog = cat'' का उपयोग करें। – GEkk

1

jQuery 1.5 के रूप में, एक स्थानीय beforeSend कॉलबैक कि आपके अनुरोध करने के लिए बाध्य किया जा सकता है। Documentation link और एक अन्य documentation link

संपादित करें: अनुरोध डेटा jqXHR वस्तु, पहले पैरामीटर beforeSend कॉलबैक में उपलब्ध है।

beforeSend(jqXHR, settings) 

फ़ायरबग में jqXHR वस्तु निरीक्षण को देखने के लिए वास्तव में, जहां यह पोस्ट डेटा संग्रहीत करता है और सिर्फ अपने मान संलग्न,

+0

ठीक है, मेरे पास यह है कि मेरे प्रश्न में (इस तथ्य से जरूरी है कि मैं रूबी पर रूबी का उपयोग कर रहा हूं), लेकिन मैं वास्तव में अनुरोध में डेटा कैसे जोड़ूं? –

+0

@duckyfuzz, संपादित उत्तर –

+0

मैंने एक्सएचआर ऑब्जेक्ट का एक लॉग जोड़ा।जैसा कि आप देख सकते हैं कि 'डेटा' विशेषता 'अपरिभाषित' है। क्या मुझे सही वस्तु मिली है? –

1

databeforeSend विधि (Jquery मूल विधि) के अंदर विशेषता (कम से कम अब, Jquery 1.7.2 का उपयोग करके) को बदलने के लिए, आप this.data चर बदल सकते हैं।

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