2009-10-03 5 views
18

क्या Jquery की स्वत: पूर्ण HTTP सबमिशन विधि को GET के बजाय POST पर सेट करने का कोई तरीका है?मैं JQuery स्वत: पूर्ण को GET के बजाय POST पर कैसे सेट करूं?

+0

इसके अलावा आप एमईसी को जीईटी को बदलने की अनुमति भी बदल सकते हैं। Http://stackoverflow.com/questions/2350921/asp-net-mvc-2-failed-with-jquery-ajax-response#2350957 – Daveo

+0

@ डेवो: यह सच है, लेकिन हमें उस सुविधा को अक्षम करने के बारे में सावधान रहना चाहिए जो कि था ब्राउज़र भेद्यता शोषण से हमें बचाने के इरादे से। – StriplingWarrior

+2

संभवतया ब्याज की: एक सुविधा अनुरोध (http://bugs.jqueryui.com/ticket/5353), और इसे अस्वीकार करने के लिए एक स्पष्टीकरण (http://forum.jquery.com/topic/jqueryui-autocomplete- पोस्ट -option के लिए रिमोट अनुरोध # 14737000002084408)। – StriplingWarrior

उत्तर

6

दुर्भाग्यवश, स्वत: पूर्ण करने का कोई विकल्प नहीं है जो आपको इसे सेट करने की अनुमति देगा। हालांकि, प्लगइन कोड में एक ही जगह है जहां $.ajax फ़ंक्शन कहा जाता है। निर्दिष्ट type विकल्प निर्दिष्ट नहीं है, जिसका अर्थ है कि यह एक GET अनुरोध के लिए डिफ़ॉल्ट होगा। आप एक type विकल्प शामिल और करने के लिए "पोस्ट" अपने मूल्य निर्धारित करने के लिए $.ajax कॉल (जो नवीनतम संस्करण की लाइन 361 पर शुरू होता है) को संशोधित कर सकते हैं:

$.ajax({ //line 361 
    type: "post", 
    ... 
+0

स्रोत को संशोधित करने का अर्थ है कि आपको अगले संस्करण में अपग्रेड करने में परेशानी होगी। – usr

+0

इसके अलावा, दस्तावेज कहता है कि 'टाइप: "पोस्ट" 'आवश्यक है। शायद, दोनों काम कर रहे हैं लेकिन लोअरकेस खराब शैली है। – usr

13

आप से पहले

$.ajaxSetup({ type: "post" }); 

उपयोग कर सकते हैं स्वत: पूर्ण करने के लिए कॉल, और यह पेज पर AJAX कॉल ओवरराइड करेगा।

+0

यह jQuery * के माध्यम से किए गए सभी * AJAX कॉल को संशोधित करता है। यह पृष्ठ पर चल रहे अन्य कोड के साथ बुरी तरह से बातचीत करता है। बेहद खतरनाक – usr

51

शायद बेहतर यह स्रोत पैरामीटर के साथ में पारित करने के बजाय इस तरह विश्व स्तर पर स्थापित करने के लिए:

$("#input").autocomplete({ 
    source: function (request, response) { 
     $.post("/AjaxPostURL", request, response); 
    } 
}); 
+0

अतिरिक्त डेटा पास होने के साथ $ .post का एक और पूर्ण संस्करण यहां दिया गया है: $(function() { \t \t var options = { \t \t \t \t \t \t \t url: "/web/ajax.php?a=query-save-projects&w=app", \t \t \t \t type: 'post', \t \t \t \t data: { \t \t \t \t \t "args":$().crypt({method:"b64enc",source:JSON.stringify(_system) }), \t \t \t \t \t "url":document.URL \t \t \t \t \t } \t \t \t \t }; \t \t $("#query-save-project-name").autocomplete({ \t \t \t \t \t source: function (request, response) { $.post(options["url"], options["data"], response, "json") }, \t \t \t \t \t minLength: 2 \t \t \t \t \t }); \t \t }); mshaffer

+0

अनुरोधों में से कोई एक विफल होने पर यह तोड़ता है। उस स्थिति में 'प्रतिक्रिया' कभी नहीं कहा जाता है जो स्वत: पूर्ण प्लगइन को तोड़ देता है। अन्यथा यह सही दृष्टिकोण है। – usr

1

यह वास्तव में बुरा विचार है स्रोत कोड को संपादित करने के लिए है क्योंकि आप अगले अपग्रेड पर अपने परिवर्तनों को खो देंगे विजेट का। ग्लोबल टाइप को "पोस्ट" या अनुरोध/प्रतिक्रिया ऑब्जेक्ट में पास करना बेहतर है।

+0

एक वैश्विक पोस्ट सेटिंग बनाना * सभी * AJAX कॉल jQuery के माध्यम से संशोधित करता है। यह पृष्ठ पर चल रहे अन्य कोड के साथ बुरी तरह से बातचीत करता है। बेहद खतरनाक – usr

-1

मैं अपनी जावास्क्रिप्ट फ़ाइल (jQuery UI के बाद लोड) में एक फ़ंक्शन को ओवरराइट करता हूं ताकि इसे किसी अन्य विकल्प के रूप में GET/POST स्वीकार कर सकें।

$.ui.autocomplete.prototype._initSource = function() { 
    var array, url, 
     that = this; 
    if ($.isArray(this.options.source)) { 
     array = this.options.source; 
     this.source = function(request, response) { 
      response($.ui.autocomplete.filter(array, request.term)); 
     }; 
    } else if (typeof this.options.source === "string") { 
     url = this.options.source; 
     /*added*/ var httpMethod = this.options.type ? this.options.type : 'GET'; 
     this.source = function(request, response) { 
      if (that.xhr) { 
       that.xhr.abort(); 
      } 
      that.xhr = $.ajax({ 
       url: url, 
       data: request, 
       dataType: "json", 
       /*added*/ type: httpMethod, 
       success: function(data) { 
        response(data); 
       }, 
       error: function() { 
        response([]); 
       } 
      }); 
     }; 
    } else { 
     this.source = this.options.source; 
    } 
}; 

मैं इसे अन्य लोगों द्वारा उल्लेख समस्याओं और कुछ को तोड़ने के बिना ऊपर को हल करती है लगता है:
- jQuery यूआई फ़ाइल सीधे संपादित करना jQuery यूआई एक दर्द का उन्नयन होगा, और अपने jQuery की मेजबानी के लिए Google API का उपयोग करने से रोक फाइल
- $ .ajaxSetup हमारे उत्पाद
पर प्रत्येक स्वत: पूर्ण या AJAX कॉल को प्रभावित करेगा - एक $। पोस्ट लिखना और इसे फ़ंक्शन के रूप में पास करना अच्छा है, लेकिन यदि आप अपनी साइट पर दर्जनों स्वत: पूर्णता का उपयोग करते हैं तो बहुत सारे टाइपिंग।

+1

स्रोत को संशोधित करने का अर्थ है कि आपको अगले संस्करण में अपग्रेड करने में परेशानी होगी। – usr

+0

सौभाग्य से, जावास्क्रिप्ट में कार्य परिवर्तनीय हैं, इसलिए आपको यह नहीं करना है।लेकिन jQuery के एक नए संस्करण ने इसे बदल दिया है, लेकिन उस विशेष समारोह में कोई भी परिवर्तन वास्तव में खो जाएगा। यही कारण है कि आप इस रणनीति का उपयोग सबसे कठिन परिस्थितियों में अधिक नहीं करना चाहते हैं। – DrShaffopolis

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