2011-04-08 17 views
9

मैं JQuery $ .ajax पद आदेश का उपयोग कर रहा हूँ मेरी वेब सर्वर पर एक ajax घटना आह्वान करने के लिए करने के लिए .data नहीं भेजता है वेब पेज, लेकिन इसमें कोई भी पोस्ट डेटा शामिल नहीं है।
यानी - "(HttpServletRequest) request.getParameterMap.size() == 0" - मुझे 3 की उम्मीद है, लेकिन शून्य हो रहा है।

उपर्युक्त कमांड को POST से GET में बदलना सबकुछ ठीक काम करता है।

TIA

+0

इस सवाल का जवाब दिया गया अन्य धागे में, जैसा कि मैंने समस्या के कारण भर में ठोकर खाई है - फायरबग का उपयोग करके, और नेट स्निफर को खोलने के लिए खोलने के लिए, मैं देख रहा हूं कि वेब सर्वर कॉल पर स्थिति 302 का जवाब दे रहा है वेब पृष्ठ। मैं थोड़ा सा समस्या के समाधान को रेखांकित कर दूंगा। –

उत्तर

-1

उपयोग success:

var formParams = "fe1=y&fe2=m&fe3=m"; 

$.ajax({ 
    type: 'POST', 
    url: '/foo.jsp', 
    async: false, 
    data: formParams, 
    success: function(data) { 
     alert('response data = ' + data); 
    } 
}); 
+2

चाहे वह 'सफलता' या 'पूर्ण' का उपयोग करता है, उस डेटा पर पहले से ही नहीं भेजा जा रहा डेटा पर कोई असर नहीं पड़ता है। (और यदि वह चाहता है तो वह 'पूर्ण' का उपयोग कर सकता है, यह ठीक काम करता है। :-)) –

1

इस प्रयास करें:

$.ajax({ 
    type: 'POST', 
    url: '/foo.jsp', 
    async: false, 
    data: { fe1: "y", fe2: "m", fe3: "m" }, 
    complete: function(xmlRequestObject, successString){ 
     ymmReceiveAjaxResponse(xmlRequestObject, successString); 
    } 
}); 

यह काम करना चाहिए।

+0

मेरी गलती है कि मैं $ _POST ['data'] तक पहुंचने का प्रयास कर रहा था .. लेकिन अगर मैं ऐसा करना चाहता, तो मैं इसे ऐसा ** डेटा होना चाहिए: {डेटा: 'someValue'}, ** .. इसे साफ़ करने के लिए धन्यवाद! – gnB

1

आपका कोड उद्धृत के रूप में ठीक है (मैंने इसे स्थानीय रूप से आजमाया है)।

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

उदाहरण के लिए, क्या आप वाकई अक्षरों से बच रहे हैं (encodeURIComponent का उपयोग कर)? या बेहतर अभी तक, jQuery इसके साथ सौदा है, इस तरह करते हैं:

$.ajax({ 
    type: 'POST', 
    url: '/foo.jsp', 
    async: false, 
    data: { 
     fe1: $("#somefield1").val(), 
     fe2: $("#somefield2").val(), 
     fe3: $("#somefield3").val() 
    }, 
    complete: function(xmlRequestObject, successString){ 
     ymmReceiveAjaxResponse(xmlRequestObject, successString); 
    } 
}); 

आप एक वस्तु में पार कर लेते हैं, jQuery आप के लिए यूआरआई एन्कोडिंग संभाल लेंगे। आप वास्तव में इसे खुद करना चाहते हैं:

var formParams = 
    "fe1=" + encodeURIComponent($("#somefield1").val()) + 
    "fe2=" + encodeURIComponent($("#somefield2").val()) + 
    "fe3=" + encodeURIComponent($("#somefield3").val()); 
$.ajax({ 
    type: 'POST', 
    url: '/foo.jsp', 
    async: false, 
    data: formParams, 
    complete: function(xmlRequestObject, successString){ 
     ymmReceiveAjaxResponse(xmlRequestObject, successString); 
    } 
}); 

वहाँ मैं फ़ील्ड नाम इनकोडिंग नहीं किया है क्योंकि उन नामों उन में कोई विशेष वर्ण नहीं है; आपको इसकी आवश्यकता है कि आपके फॉर्म नाम उस से अधिक दिलचस्प हैं।

+0

आप पूरी तरह से सही हैं कि यह स्टब कोड है; मैं वास्तव में एक फॉर्म फ़ील्ड यानी 'var formParams = $ ("# myForm") पर serialize() विधि का आह्वान कर रहा हूं। Serialize();', और यह मेरे लिए कुछ भी प्रतीत नहीं होता है। –

+0

@ मिस्सी: हम्म, 'धारावाहिक' आपके लिए एन्कोडिंग को संभालेगा, इसलिए यह नहीं है। मूल रूप से, कोड को काम करना चाहिए, और इस अंत में काम करता है, इसलिए आपको डीबगर के साथ कदम उठाना होगा और देखें कि jQuery वास्तव में क्या भेज रहा है। यह हो सकता है कि jQuery अपनी नौकरी कर रहा है, लेकिन किसी भी कारण से आपके जेएसपी के अनुरोध को रूट करने वाली कॉन्फ़िगरेशन गड़बड़ हो गई है। –

5

समस्या का कारण फ़ायरबग का उपयोग करके और नेट गैजेट खोलने के लिए पाया गया था।

मैं देख रहा हूं कि वेब सर्वर वेब पेज पर कॉल पर स्थिति 302 का जवाब दे रहा है।

फायरबग/नेट में 302 अनुरोध पर विस्तार, और पैराम्स, हेडर, प्रतिक्रिया, और एचटीएमएल की जांच करने से जल्दी ही पता चला कि यह सर्वर पर उत्पन्न एक अनुप्रयोग विशिष्ट समस्या थी।

सभी की प्रतिक्रिया के लिए धन्यवाद

0

frustratingly चार घंटे के लिए प्रयास करने के बाद, मुझे पता चला है कि यह ajax POST इस प्रकार में contentType की स्थापना करके इस लक्ष्य को हासिल करने में सक्षम है,

var dataToSend = { 
    "username" : $("#username").val(), 
    "password" : $("#password").val() 
}; 

$.ajax({ 
    type: "POST", 
    url: "somepage.jsp", 
    data: dataToSend, 
    contentType: "application/x-www-form-urlencoded; charset=UTF-8", //this is must 
    success: function(datum, msg, textStatus){ 
     $("#result").html("<h3>" + "Status : " + msg + "</h3>") 
     .fadeIn("slow"); 
    } 
}); 
संबंधित मुद्दे