2012-02-04 19 views
5

मैं एक serverside समारोह हैबेसिक "रॉ" अजाक्स कॉल

foo("bar") returns "baz" 

और इस तरह है कि एक HTTP सर्वर में इस समारोह लिपटे है

POST /foo HTTP/1.1 
... 

bar 

वापस आ जाएगा:

HTTP/1.1 200 OK 
... 

baz 

यानी इनपुट स्ट्रिंग के साथ एक POST अनुरोध HTTP संदेश निकाय के रूप में आउटपुट स्ट्रिंग को 200 ओके के HTTP संदेश निकाय के रूप में वापस कर देगा। सर्वर से एसिंक्रोनस रूप से किए जाने के लिए और बाद में जब प्रतिक्रिया मिली है मैं चाहूँगा

function sendFoo(input_string) 
{ 
    ??? // should asynchronously start process to POST input_string to server 
} 

function recvFoo(output_string) 
{ 
    ... 
} 

जब मैं sendFoo फोन मैं चाहूँगा पोस्ट:

अब वेब पेज पर मेरी जावास्क्रिप्ट में मैं दो कार्यों 200 ओके के संदेश निकाय के साथ recvFoo (शायद किसी अन्य धागे या जो भी) में कहा जाता है।

मैं उपरोक्त sendFoo को कैसे कार्यान्वित करूं? मैं वर्तमान में jQuery का उपयोग कर रहा हूं, लेकिन शुद्ध जावास्क्रिप्ट में एक समाधान भी ठीक है। धन्यवाद

$.post('foo.html', {'varname' : 'bar'}, function(data) { 
    recvFoo(data); 
}); 

बहुत अच्छी तरह से सवाल तैयार कर ली: (मैं भी सर्वर संशोधित कर सकते हैं अगर जरूरत हो सकता है?)

समाधान:

function sendFoo(input_string) 
{ 
    $.ajax({ url: "/foo", type: "POST", data: input_string, success: recvFoo }); 
} 
+0

आप पोस्ट सही माध्यम से jQuery AJAX का उपयोग कर सकते हैं? – kobe

+0

क्या आपको अभी भी कठिनाइयां हैं? – gdoron

+0

आपके साथ शुरू होने से जल्द ही सुझाए गए समाधानों का प्रयास कर रहा है। क्रोम में मुझे लगता है कि यह पहले "विकल्प" अनुरोध भेजने की कोशिश करता है। अगर यूआरएल खराब है तो मुझे कोई त्रुटि संदेश नहीं मिलता है, लेकिन मुझे लगता है कि यह अपरिहार्य है। –

उत्तर

5

क्लासिक JavaScript

$.ajax({ 
     url:"URL of foo...", 
     type: "POST", 
     data: "what ever", 
     success: recvFoo 
     }); 

या post विकल्प पर वापस आने की कोई जरूरत नहीं:

$.post('The url of foo', {input_string : 'bar'}, recvFoo); 
+0

क्यों इसके लिए 'jQuery.post() 'का उपयोग न करें? – Jivings

+0

@ जिविंग्स। मुझे 'अजाक्स' पसंद है, यह मेरे लिए और अधिक पठनीय है। क्या आप चाहते हैं कि मैं 'पोस्ट' विकल्प जोड़ूं? – gdoron

+0

वही है जो मैंने पहले ही उत्तर दिया है। – Jivings

3

jQuery पोस्ट काम करेगा।

+0

@gdoron कोई फर्क नहीं पड़ता। दोनों काम करेंगे। – Jivings

5

XMLHttpRequest ऑब्जेक्ट की open() विधि आपको HTTP विधि निर्दिष्ट करने की अनुमति देती है जबकि send() विधि संदेश निकाय निर्दिष्ट करने की अनुमति देती है, उदा।

var xhr = ... // obtain XMLHttpRequest object 
xhr.open('POST', '/foo'); // HTTP method and requested URL. 
xhr.onreadystatechange = function() { 
    if (xhr.readyState == 4 && xhr.status == 200) { 
     recvFoo(xhr.responseText); // Will pass 'baz' to recvFoo(). 
    } 
}; 
xhr.send('bar'); // Message body with your function's argument. 
संबंधित मुद्दे