ปัญหาในการใช้วัตถุ JSON ในเซิร์ฟเล็ต

นี่คือสิ่งที่ฉันพยายามทำและมันค่อนข้างง่าย แต่ฉันติดขัด: ฉันกำลังพยายามส่งวัตถุ JSON ที่สร้างขึ้นใน JSP ไปยังเซิร์ฟเล็ตฝั่งเซิร์ฟเวอร์แล้วแยกวิเคราะห์มัน

สิ่งที่ฉันทำจนถึงตอนนี้:

  • สร้าง json.
  • ส่ง json ไปที่แบ็กเอนด์
$.ajax({
            data: jsontosend,
            url: 'MYSERVLET?name=asdf',
            success: function(res){
                alert('posted');
            }
        })

ปัญหา:

  • JSON นี้อ้างอิงชื่ออะไรดังนั้นฉันจึงสามารถรับมันในเซิร์ฟเล็ตโดยใช้ request.getParameter()
  • เมื่อฉันพิมพ์ request.getParameterNames() ฉันจะได้รับชื่อพารามิเตอร์เป็นสตริง JSON ดังนั้นผลลัพธ์ของชื่อพารามิเตอร์ทั้งหมดภายใน MYSERVLET จึงมีลักษณะเช่นนี้
Parameter = name
Parameter = {"ticker":"asd","date":"asd","bucket":"300","entry":[{"type":"asd","indicator":"asd","condition":"asd"}],"exit":[{"type":"qwe","indicator":"qwe","condition":"qwe"}]}

มีใครมีความคิดว่าปัญหาคืออะไร?

นอกจากนี้ ฉันได้ลองดูคำถามที่นี่ใน stackoverflow แต่ปัญหาเดียวกันก็มีอยู่ที่นั่นเช่นกัน นอกจากนี้ยังมีคำถามที่ซ้ำกันซึ่งไม่มี ได้รับคำตอบแล้ว

ช่วย! :(


person Shrayas    schedule 08.09.2011    source แหล่งที่มา
comment
คุณเคยใช้บางอย่างเช่น LiveHeaders ของ Firefox เพื่อดูว่ามีอะไรถูกส่งไปบ้างไหม? คุณจะสามารถดูคู่คีย์-ค่าทั้งหมดที่ถูกส่งไปยังเซิร์ฟเล็ตที่อ้างอิง   -  person El Guapo    schedule 08.09.2011


คำตอบ (2)


อ่าน http://api.jquery.com/jQuery.ajax/#sending-data-to-server:

ตัวเลือกข้อมูลอาจมีสตริงการสืบค้นในรูปแบบ key1=value1&key2=value2 หรือแผนผังของรูปแบบ {key1: 'value1', key2: 'value2'} หากใช้รูปแบบหลัง ข้อมูลจะถูกแปลงเป็นสตริงการสืบค้นโดยใช้ jQuery.param() ก่อนที่จะส่ง

ดังนั้นคุณควรใช้

$.ajax({
        data: {theNameOfTheParameter : jsontosend,
               name : 'asdf'},
        url: 'MYSERVLET',
        success: function(res){
            alert('posted');
        }
    })

และใช้ request.getParameter("theNameOfTheParameter") เพื่อรับสตริง JSON

person JB Nizet    schedule 08.09.2011
comment
สุดยอดซอส ขอบคุณ TON MAN! :D - person Shrayas; 08.09.2011

คุณไม่ได้รับวัตถุ json ในเซิร์ฟเล็ตของคุณ JQuery แปลงเป็นพารามิเตอร์ http เช่นเดียวกับสิ่งที่คุณได้รับจากแบบฟอร์ม ตัวอย่าง: ?ticker=asd&bucket=300

เพื่อตอบคำถามของคุณ ไม่มีชื่อเดียว json ที่ถูกคัดค้านมีการระเบิดหลายชื่อ

แก้ไข: ลองเพิ่มประเภท: 'โพสต์'

สำหรับคำขอของคุณ คุณยังสามารถเพิ่ม processData: false ได้ ซึ่งในกรณีนี้ JQuery จะส่ง json ไม่ใช่พารามิเตอร์ http อย่างไรก็ตาม ฉันขอแนะนำให้ใช้ http debugger เช่น fiddler ซึ่งจะทำให้มองเห็นสิ่งที่ถูกส่งไปมาได้

person Esben Skov Pedersen    schedule 08.09.2011
comment
ฉันเพิ่งลองโดยทำ System.out.println(request.getParameter("ticker")); และฉันได้รับ null :( - person Shrayas; 08.09.2011
comment
@shreyas: คุณพบวิธีแก้ปัญหาหรือไม่ ?? กรุณาแบ่งปันถ้าคุณทำ - person streak; 07.10.2013