2013-04-15 12 views
34

में 400 खराब अनुरोध त्रुटि प्राप्त करना मैं jquery का उपयोग करके एक अजाक्स POST अनुरोध भेजने की कोशिश कर रहा हूं लेकिन मुझे 400 खराब अनुरोध त्रुटि है।Jquery Ajax POST

$.ajax({ 
    type: 'POST', 
    url: "http://localhost:8080/project/server/rest/subjects", 
    data: { 
    "subject:title":"Test Name", 
    "subject:description":"Creating test subject to check POST method API", 
    "sub:tags": ["facebook:work", "facebook:likes"], 
    "sampleSize" : 10, 
    "values": ["science", "machine-learning"] 
    }, 
    error: function(e) { 
    console.log(e); 
    } 
}); 

यह कहते हैं:

यहाँ मेरी कोड है अनुरोध से संसाधन का निर्माण नहीं कर सकते। मुझे क्या याद आ रही है?

+0

प्रारंभिक जांच: आपके ब्राउज़र http की ओर इशारा कर रहा है: // स्थानीय होस्ट: 8080 /, सही? –

+1

शायद आपकी समस्या का कारण नहीं है, लेकिन ऐसा लगता है कि ["फेसबुक: काम, फेसबुक: पसंद"] होना चाहिए ["फेसबुक: काम", "फेसबुक: पसंद"] – smerny

+0

क्या आप जावा और जर्सी का उपयोग कर रहे हैं? –

उत्तर

75

अंत के साथ आगे बढ़ना निम्नलिखित समारोह का उपयोग कर "डाटा" वस्तु से क्वेरी बनाने के लिए की जरूरत है, मैं गलती हो गया और कारण मैं stringify की जरूरत थी जेएसओएन डेटा मैं भेज रहा था। मुझे XHR ऑब्जेक्ट में सामग्री प्रकार और डेटाटाइप सेट करना होगा। तो सही संस्करण यहाँ है:

$.ajax({ 
    type: 'POST', 
    url: "http://localhost:8080/project/server/rest/subjects", 
    data: JSON.stringify({ 
    "subject:title":"Test Name", 
    "subject:description":"Creating test subject to check POST method API", 
    "sub:tags": ["facebook:work", "facebook:likes"], 
    "sampleSize" : 10, 
    "values": ["science", "machine-learning"] 
    }), 
    error: function(e) { 
    console.log(e); 
    }, 
    dataType: "json", 
    contentType: "application/json" 
}); 

हो सकता है यह किसी और में मदद मिलेगी।

+4

अगर मैं इसे शुरू करने के लिए पाया तो मुझे एक घंटे का निराशाजनक डीबगिंग बचा सकता था। धन्यवाद;) – bugsduggan

+5

जैसा कि एक बार थॉमस एडिसन ने कहा था, "आप असफल नहीं हुए हैं, आपने उन तरीकों से सीखा है जो काम नहीं करेंगे" उस समय में खुश रहें कि आपको पहले यह नहीं मिला और समस्या को हल करने की कोशिश की । – sachinjain024

+1

इससे मेरी मदद मिली। यह कदम क्यों जरूरी है? – JasonTS

0

आप

function buildQuery(obj) { 
     var Result= ''; 
     if(typeof(obj)== 'object') { 
      jQuery.each(obj, function(key, value) { 
       Result+= (Result) ? '&' : ''; 
       if(typeof(value)== 'object' && value.length) { 
        for(var i=0; i<value.length; i++) { 
         Result+= [key+'[]', encodeURIComponent(value[i])].join('='); 
        } 
       } else { 
        Result+= [key, encodeURIComponent(value)].join('='); 
       } 
      }); 
     } 
     return Result; 
    } 

और फिर

var data= { 
"subject:title":"Test Name", 
"subject:description":"Creating test subject to check POST method API", 
"sub:tags": ["facebook:work, facebook:likes"], 
"sampleSize" : 10, 
"values": ["science", "machine-learning"] 
} 

$.ajax({ 
    type: 'POST', 
    url: "http://localhost:8080/project/server/rest/subjects", 
    data: buildQuery(data), 
    error: function(e) { 
    console.log(e); 
    } 
}); 
+0

आपके पास "है" नहीं है, jQuery आपके लिए ऐसा करने का प्रयास करेगा। हालांकि, अगर आप इसे स्वयं बनाते हैं, तो आप इसे उस प्रारूप में गारंटी दे सकते हैं, जिसमें आप चाहते हैं। –

+0

मुझे नहीं लगता कि मुझे इस तरह से ऑब्जेक्ट बनाने की आवश्यकता है। Jquery मेरे लिए यह भारी उठाने करता है। इसके अलावा, जब भी POST विधि के माध्यम से डेटा भेजा जाता है तो यह हमेशा एन्कोड किया जाता है, इसलिए हमें भेजे जाने वाले डेटा पर एनकोडुरिकॉम्पोनेंट का उपयोग करने की आवश्यकता नहीं होती है। – sachinjain024

2

प्रश्न थोड़ा पुराना है ... लेकिन अगर किसी को त्रुटि 400 का सामना करना पड़ता है, तो यह पोस्ट अनुरोध के पैरामीटर के रूप में csrfToken पोस्ट करने की आवश्यकता से भी आ सकता है।

आप अपने टेम्पलेट में शिल्प से नाम और मान प्राप्त करने के लिए:

<script type="text/javascript"> 
    window.csrfTokenName = "{{ craft.config.csrfTokenName|e('js') }}"; 
    window.csrfTokenValue = "{{ craft.request.csrfToken|e('js') }}"; 
</script> 

और उन्हें अपने अनुरोध में पारित

data: window.csrfTokenName+"="+window.csrfTokenValue 
+0

किसी ने भी क्राफ्ट सीएमएस का उल्लेख नहीं किया है? –