एक शानदार बैकएंड के साथ एक वेबपैप के लिए मैं jquery के $post का उपयोग कर सर्वर पर कुछ जेसन पोस्ट कर रहा हूं। अब मेरे आश्चर्य के लिए, जेसन अनुरोध निकाय के बजाय अनुरोध के फॉर्म डेटा के लिए पैरामीटर कुंजी में भरा हुआ है। मैं कुछ other ways to do it के बारे में सोच सकता हूं, लेकिन सवाल यह है कि यह मेरी अपेक्षा के अनुसार काम क्यों नहीं करता है।jquery json को अनुरोध निकाय के बजाय पैरामीटर नाम के रूप में पोस्ट क्यों करता है?
सर्वर मैं scalatra का उपयोग करें और कुछ अनुरोध की जानकारी प्रिंट पर: करता है कि मैं क्या सोचता
println("Request received:")
println(fromInputStream(request.getInputStream).getLines().mkString)
println("--------------")
println(request.getParameterMap.toString)
println("==============")
अब एक सरल कर्ल सही है:
curl -X POST http://localhost:8080/x -H "Content-Type: application/json" -d '{"a":"b"}'
का उत्पादन:
Request received:
{"a":"b"}
-------------
{}
==============
और एचटीएमएल + जेएस की समस्या को हल करने के लिए:
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<body>
<button type="button" onclick="doPost()">
POST
</button>
<script src="http://code.jquery.com/jquery-1.7.1.min.js"></script>
<script type="text/javascript">
function doPost() {
$.post("http://localhost:8080/x",
JSON.stringify({"a":"b"}),
function(data) {});
}
</script>
</body>
</html>
का उत्पादन:
Request received:
--------------
{{"a":"b"}=[Ljava.lang.String;@7a2897ac}
==============
तो अगर मैं एक stringified json स्ट्रिंग और एक कॉलबैक मैं सब कुछ एक एकल पैरामीटर कुंजी में भरवां पाने के साथ $ पद का उपयोग करें। यदि यह सामान्य है, तो मैं जानना चाहता हूं कि क्यों, और मैं सर्वर पर इसे स्पष्ट रूप से कैसे सुलझाना चाहता हूं। यदि यह सामान्य नहीं है, तो मैं जानना चाहता हूं कि मुझे $ पोस्ट का उपयोग करके प्रतिक्रिया निकाय में प्राप्त करने के लिए क्या करना चाहिए।
अद्यतन: वहाँ अब एक feature request for jquery to support contentType on $.post