JQuery Ajax POST के बजाय GET भेज रहा है


87

निम्न कोड POST HTTP अनुरोध के बजाय GET चलाता है।

function AddToDatabase() {
  this.url = './api/add';
}

AddToDatabase.prototype.postData = function(dataToPost) {
$.ajax({
    type: "POST",
    url: this.url,
    data: dataToPost,
    context: this,
    success: this.onSuccess
  });
};


var AddToDatabase = new AddToDatabase();
data = {data: 'coucou'};
AddToDatabase.postData(data);

मैं POST क्यों और कैसे प्राप्त कर सकता हूं?


मैं Google Chrome निरीक्षण और फ़ायरफ़ॉक्स निरीक्षण में देखता हूं कि ब्राउज़र GET भेजता है। यहाँ क्रोम से है:

अनुरोध URL: http: // localhost / SAMPLE-CODES / UPDATE% 20MYSQL / api / add / अनुरोध विधि: GET स्थिति कोड: 200 ठीक है


हल किया

'./Api/add' नामक URL वास्तव में './api/add/index.php' पर पोस्ट किया गया था। उस कॉल को '' ./api/add /index.php'या' ./api/add /'करने से मुझे एक POST अनुरोध मिलता है।

यह सिर्फ एक गलत URL था, लेकिन किसी कारण से मुझे '.api / add /' के लिए एक सफल GET अनुरोध मिल रहा था।


2
आपको क्यों लगता है कि यह एक GET अनुरोध होगा?
विक्टर एस।

1
क्या आपने फायरबैक्स पर ajax कॉल को चलाने की कोशिश की है, जिसमें नेट पैनल फायरबग पर खोला गया है?
Fabrizio Calderan

2
टेस्ट - अगर आप इसे चलाएंगे और नेटवर्क पैनल को चेक करेंगे, तो आप पाएंगे कि यह एक पोस्ट रिक्वेस्ट भेजता है
विक्टर एस।

1
@tucson - जैसा कि मैंने पहले ही लिखा है - अपने .htaccess फ़ाइल की जाँच करें। संभवतः यह फिर से लिखने के बजाय पुनर्निर्देशित करता है। असल में, मैं देख रहा हूं कि JS ओके है (उम्मीद है कि डॉट इन url './api/add' जो मुझे भ्रमित करता है)। तो यह सर्वरसाइड समस्या की तरह दिखता है। और आपके प्रश्न में जानकारी विशिष्ट सहायता देने के लिए पर्याप्त नहीं है
विक्टर एस।

1
कृपया जवाब के रूप में समाधान जोड़ें
एडम लिंच

जवाबों:


101

MVC पर कुछ समस्या। किसी कारण से जब मैं [HttPost] को हटाता हूं तो यह अपेक्षित रूप से काम करता है, भले ही मैं ajax को POST का उपयोग करने के लिए कह रहा हूं।

  • यह पता चला है कि आपको उपयोग करने की आवश्यकता है

प्रकार: "पोस्ट"

  • हालांकि jQuery पेज पर उदाहरण का उपयोग करने के लिए कहते हैं

विधि: "POST"

अब यह POST का है

लेकिन प्रलेखन में खुदाई के बाद मुझे यह मिला।

यहाँ छवि विवरण दर्ज करें


6
यह वह मुद्दा है जो मैं सिर्फ कर रहा था। महसूस नहीं किया कि विकल्प का नाम 1.9 में बदल गया। सोचा कि यह हमेशा "विधि" थी
बिल गैरीसन

2
मैं दोनों के साथ कोई समस्या नहीं देख रहा हूँ बस सुनिश्चित करने के लिए। { method : "POST", type: "POST" }
स्कॉट

हाँ, आप कंस्ट्रक्टर में जो चाहें शामिल कर सकते हैं, लेकिन इन दोनों में संगतता के लिए वास्तव में कोई मतलब नहीं है। ज्यादातर लोग अब किसी भी तरह से 1.11 या 2.1 का उपयोग कर रहे हैं। यह सिर्फ 1.4.3 या 1.6.2 से अपग्रेड करने के बाद एक समस्या का कारण बनता है
Piotr Kula

3
मैंने शुक्रवार को इसे ठीक करने की कोशिश में एक लंबे समय के लिए एक नए दृश्य का उपयोग करने के लिए एक पुराने दृश्य को अपडेट करने की कोशिश की। आपको बहुत - बहुत धन्यवाद!
नोबल अपलिफ्ट

31

मेरे पास यह मुद्दा था और प्रति @ FAngle के सुझाव के कारण यह था क्योंकि मेरा .htaccess ट्रेसिंग स्लैश को हटा रहा था - और मैंने url को सेट किया था /ajax/foo/bar/और नहीं /ajax/foo/bar। रीडायरेक्ट POST से GET के अनुरोध को बदल देता है। / और समस्या को हल निकालें!


इससे मेरे लिए मूल प्रश्न में वर्णित सटीक समस्या हल हो गई। मैं Wamp 3.0.6 पर एक लार्वा ऐप होस्ट कर रहा हूं
İlter Kağan larcal

9

URL './api/add'वास्तव में पुनर्निर्देशित हो गया './api/add/index.php'। इसलिए यह विचित्र पक्ष प्रभावित करता है, जिसके GETबजाय उपयोग करने के बाद भेजे गए पुनर्निर्देशन के बाद नया अनुरोधPOST

समाधान

  • पूर्ण url का उपयोग करें './api/add/index.php'
  • या एक स्लैश जोड़ें './api/add/'

6

मैंने इस व्यवहार पर ध्यान दिया, जहां मेरा POST GET भेज रहा था। परिदृश्य काफ़ी अनोखा है, लेकिन शायद यह किसी की मदद करेगा।

यह मेरे उपयोगकर्ता भूमिका-संपादन पृष्ठ पर मेरे साथ हो रहा था, जहां मैं एक भूमिका की जाँच या अनियंत्रित होने पर तत्काल कार्रवाई के रूप में अजाक्स (पोस्ट) का उपयोग कर रहा था।

जब भी उनकी भूमिका की जानकारी बदली जाती है, तो मेरे पास उपयोगकर्ता को फिर से प्रमाणित करने के लिए (और उन्हें पुनर्निर्देशित) करने के लिए कॉन्फ़िगर किया गया सर्वर भी होता है ताकि उनके दावों को ताज़ा किया जा सके।

क्रूर चक्र समाप्त हो गया:

  1. पहली भूमिका अपडेट - POST - 200 सफलता

  2. अगला रोल अपडेट - POST - 302 मिला -> रीडायरेक्ट (मैंने इसे तब तक नोटिस नहीं किया जब तक मैंने क्रोम नेटवर्क नेटवर्क के बजाय फ़िडलर का उपयोग नहीं किया)

  3. (2) (उसी URL) से पुनर्निर्देशित कॉल - GET - 404 नहीं मिला (क्योंकि मैंने केवल पोस्ट की अनुमति दी है)

  4. गोटो (1)

जब मैंने ajax रिक्वेस्ट (एक्सेप्ट टाइप्स के आधार पर) का पता लगाया तो मैंने सर्वर को री-ऑथेंटिकेशन / क्लेम अपडेट को बायपास करने के लिए बदल दिया।


आपका बहुत बहुत धन्यवाद!
मशीनीडक्ट

ओह! कुछ इसी तरह का सामना किया। जाहिर है, मेरे नियंत्रक स्तर में, यह एक सत्र पैरामीटर की उम्मीद कर रहा था जिसे मैंने नए नियंत्रक समापन बिंदु में शामिल नहीं किया है, और यह 302 और फिर जीईटी कर रहा था। धन्यवाद दोस्त।
निमिला हिरन्या

5

मैंने पाया कि जब dataType: 'jsonp'इसका उपयोग अनुरोध को धर्मान्तरित करता है GET। मैंने dataType: 'json'इसे बदल दिया इससे बदल GETगया POST


क्या आप कारण हैं कि यह व्यवहार क्यों देखा गया?
सौरभ सराठे

@ सौरभराठे - JSONP स्क्रिप्ट तत्वों को उत्पन्न करके काम करता है जो केवल GET अनुरोध उत्पन्न कर सकते हैं।
क्वेंटिन

3

मेरे पास एक समान मुद्दा था और https://मेरे url से हार्डकोड को हटाते ही यह मेरे लिए काम करने लगा ।

jQuery.ajax({
 type: "POST",
 url: "www.someurl.com",//instead of "https://www.someurl.com"
 data: { foo:"bar"},
 success: function(d){ console.log(d); },
 dataType: "JSONP"
});

यह HTTP और HTTPS के बीच एक समस्या की तरह लगता है (यानी आपके www.someurl.com के पास एक वैध प्रमाण पत्र नहीं है)
एलेक्सिस विलके

2

मेरे लिए, आपका कोड ऑफ़ ओके दिखता है, लेकिन अगर आप सुनिश्चित होना चाहते हैं, तो आप $ .ajax के बजाय $ .post का उपयोग कर सकते हैं।

$.post('ajax/test.html', function(data) {
 $('.result').html(data);
});

jquery लिंक: http://api.jquery.com/jQuery.post/


8
post$ .ajax ({प्रकार: 'POST'}) के लिए एक शॉर्टहैंड विधि है
विक्टर एस।

हां, लेकिन जैसा कि आपका कोड अच्छा लग रहा है। जब मैं इसका परीक्षण कर रहा हूं, यह कुछ पोस्ट अनुरोध करता है
Mr_DeLeTeD

1

अपनी .htaccess फ़ाइल देखें या किसी अन्य चीज़ की खोज करें जो आपके अनुरोध को पुनर्निर्देशित कर सकती है


1

मुझे भी यही समस्या थी और यह सवाल मिला लेकिन जवाबों से मेरी समस्या हल नहीं हुई। मैं अंततः इसे contentTypeअजाक्स अनुरोध में क्षेत्र को हटाकर हल करता हूं ।

contentType: "application/json",

1

मेरे पास यह मुद्दा था, और यह आईआईएस में एक यूआरएल रिवाइराइट मॉड्यूल निकला।

मैं ASP.NET MVC और WebAPI का उपयोग कर रहा हूं। मैंने लोअरकेस URL को बाध्य करने के लिए नियम बनाया है ताकि सामाजिक नेटवर्क एक ही URL को दो भिन्न पृष्ठों के रूप में न देखें।

उदाहरण के लिए:

" http://url.com/View/Something/123GuidIdSomething "

बनाम

" http://url.com/view/something/123guididsomething "

हालाँकि, यह किसी भी तरह मेरे अजाक्स अनुरोधों के साथ खिलवाड़ कर रहा था। मैंने नियम को निष्क्रिय कर दिया और समस्या हल हो गई।


0

एक बहुत ही सामान्य गलती यह है कि हम बटन प्रकार का उपयोग जमा के रूप में कर रहे हैं और फार्म के लिए विधि नहीं बदल रहे हैं (जो डिफ़ॉल्ट रूप से प्राप्त होता है)

सुनिश्चित करें कि आप बटन प्रकार सबमिट का उपयोग नहीं करते हैं और यदि आप करते हैं तो आपने पोस्ट करने के लिए फ़ॉर्म विधि को बदल दिया है

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.