2011-05-07 7 views
9

मैं जेएसपी और सर्वलेट का उपयोग कर वेब एप्लिकेशन बना रहा हूं, मैं jsp से AJAX अनुरोध भेजता हूं और मैं सर्वलेट से दो जेसन ऑब्जेक्ट्स लौटना चाहता हूं। मैंने निम्नलिखित करने की कोशिश की लेकिन कोड काम नहीं किया।एक AJAX अनुरोध का उपयोग कर जावा सर्वलेट से एकाधिक जेसन ऑब्जेक्ट्स को वापस कैसे करें

jQuery में // मैं इस कोड

 var id = $(this).attr('id'); 

     var paramenters = {"param":id}; 

     $.getJSON("MyServlet", paramenters, function (data1,data2){ 

      $("h3#name").text(data1["name"]); 

      $("span#level").text(data1["level"]); 

      $("span#college").text(data2["college"]); 

      $("span#department").text(data2["department"]); 

     }); 

// सर्वलेट में लिखा है कि मैं इस कोड

लिखा
String json1 = new Gson().toJson(object1); 

    String json2 = new Gson().toJson(object2); 

    response.setContentType("application/json"); 

    response.setCharacterEncoding("utf-8"); 

    response.getWriter().write(json1); 

    response.getWriter().write(json2); 

कोई मेरी मदद कर सकते ???

उत्तर

19

आप इस तरह यह करना चाहिए:

सर्वर साइड:

String json1 = new Gson().toJson(object1); 
String json2 = new Gson().toJson(object2); 
response.setContentType("application/json"); 
response.setCharacterEncoding("utf-8"); 
String bothJson = "["+json1+","+json2+"]"; //Put both objects in an array of 2 elements 
response.getWriter().write(bothJson); 

क्लाइंट साइड:

$.getJSON("MyServlet", paramenters, function (data){ 
    var data1=data[0], data2=data[1]; //We get both data1 and data2 from the array 
    $("h3#name").text(data1["name"]); 
    $("span#level").text(data1["level"]); 
    $("span#college").text(data2["college"]); 
    $("span#department").text(data2["department"]); 
}); 

आशा इस मदद करता है। चीयर्स

+0

आपको बहुत बहुत धन्यवाद – sahar

2

JSON सारणी में उन्हें लपेटें:

[ {..}, {..}, {..}] 

या, उन्हें किसी अन्य वस्तु में लपेट:

{ "result1":{..}, "result2":{..} } 
1

आप सरणी के तत्वों के रूप में दोनों वस्तुओं के साथ एक JSON सारणी लौट सकते हैं।

$.getJSON("MyServlet", paramenters, function (data){ 
     var data1 = data[0]; 
     var data2 = data[1]; 

     $("h3#name").text(data1["name"]); 

     $("span#level").text(data1["level"]); 

     $("span#college").text(data2["college"]); 

     $("span#department").text(data2["department"]); 

    }); 
+0

thaaaaaaaaaak आप ,, – sahar

1

आप एक ही json में दोनों लगाने की जरूरत करने जा रहे हैं:

[{"name": "object1"}, {"name": "object2"}] 

फिर अपने जावास्क्रिप्ट कोड कुछ इस तरह हो सकता है: अपने सर्वलेट वापसी JSON इस तरह एक संरचना है कि है इसलिए

response.getWriter().write("["); 
response.getWriter().write(json1); 
response.getWriter().write(","); 
response.getWriter().write(json2); 
response.getWriter().write("]"); 

तरह स्ट्रिंग यह उन्हें एक json सरणी

आप भी कर सकते थे पी में डालता है उन्हें एक json वस्तु में केन्द्र शासित प्रदेशों

response.getWriter().write("{\"object1\":"); 
response.getWriter().write(json1); 
response.getWriter().write(",\"object2\":"); 
response.getWriter().write(json2); 
response.getWriter().write("}"); 
0

@ एडगर का जवाब मेरे लिए काम करता है। लेकिन मुझे लगता है कि हमें अपने आप से सरणी बनाने से बचना चाहिए, इसलिए मैं एक सूची का उपयोग करने का सुझाव देता हूं। कोड कुछ इस तरह होगा:

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 
    ... 
    resp.setContentType("application/json"); 
    resp.setCharacterEncoding("utf-8"); 
    ArrayList<Object> obj_arr = new ArrayList<Object>(); 
    obj_arr.add(obj1); 
    obj_arr.add(obj2); 
    Gson gson = new Gson(); 
    String tmp = gson.toJson(obj_arr); 
    resp.getWriter().write(tmp); 
} 

और सामने अंत में, डेटा पर हम पाते हैं, तो हम data[0] उपयोग कर सकते हैं obj1 पुनर्प्राप्त करने के लिए और obj2 पुनर्प्राप्त करने के लिए। कोड कुछ इस तरह हो जाएगा (मैं ajax यहाँ उपयोग कर रहा हूँ):

$('#facts_form').submit(function (e) { 
    e.preventDefault(); 
    var data = new FormData(this); 
    var url = 'import'; 
    $.ajax({ 
     url: url, 
     type: "POST", 
     data: data, 
     processData: false, 
     contentType: false, 
     async: false, 
     cache: false, 
     success: function (data) {     
      for (var i = 1; i < data.length; i++){ 
       //do whatever 
      } 
     }, 
     error: function (xhr, status, error) { 
      alert(status + "\n" + error); 
     } 
    }); 
}); 
संबंधित मुद्दे