【问题标题】:How do I pass multiple JSON from servlet to Javascript如何将多个 JSON 从 servlet 传递到 Javascript
【发布时间】:2012-12-07 19:46:11
【问题描述】:

我想将 3 个 JSON 传递给前端。我可以单独通过所有 3 个。我这样做是为了检查它是否正常工作。

我是这样做的:

response.getWriter().write(json.toString());

我在这里的一篇文章中读到,您可以创建一个 json 数组并将该数组发送到 Ajax 调用。

所以我尝试这样做:

String json = "["+ json1.toString() + "," + json2.toString() + "," + json3.toString() + "]"; 
response.getWriter().write(json.toString());

在房子的客户端:

$.ajax({
        data: {param1: 'p1', param2: 'p2', param3: 'p3', param4: 'p'},
        dataType: 'json',
        url: './GetDataServlet',
        type: 'POST',
        success: function(data) {
            var   data1 = data[0];
            var   data2 = data[1]; 
            var   data3 = data[2];
$.each(data1 , function(i, val) {
 $("#personal_data").append("<p> val.firstname </p>")
 $("#personal_data").append("<p> val.lastname </p>")
)};
$.each(data2 , function(i, val) {
 $("#department_data").append("<p> val.departmentid </p>")
 $("#demartment_data").append("<p> val.departmentname </p>")
)};

//Not attaching the entire code, because it's quite long. :) 
        },
        error: function() {
            alert("An error occured while attempting fetch data.");
        }
    });

当您进行 $.ajax 调用时,如何将多个 JSON 传递给客户端。

谢谢,

【问题讨论】:

  • 为什么不进行三个不同的调用或返回三个 json 对象的集合/数组?
  • 您正在做的是订购三重 JSON 三明治。您要做的是订购三个 JSON 三明治。您的服务器将知道吃三个单独的 JSON 三明治的顺序,因为它知道您订购它们的顺序。

标签: javascript ajax json servlets


【解决方案1】:

您可以尝试发送三个对象的单个数组。 [Obj1 , Obj2 , Obj3]

如果返回的三个对象取决于之前发送的对象(比如Obj2 取决于Obj1.X 属性是 true 还是 false,那么您可以进行三个单独的调用

var firstResult = $.ajax({  
    url : firstUrl  
    ... other details
});

var firstResult.done(function(Obj1){

  if(Obj1.X){
    $.ajax({  
      url : secondUrl  
      ... other details
    });

   ... other calls
});

【讨论】:

    【解决方案2】:

    在格式正确的 JSON 和 AJAX 请求/响应中,1 次调用提供 1 个 JSON 字符串。

    当然,您可以在允许的 JSON 结构中任意组合这些 JSON 字符串。在您的情况下,在 JSON 数组包装器中组合三个 JSON 对象绝对没有错。

    我想你唯一的问题可能在这里:

    String json = "["+ json1.toString() + "," + json2.toString() + "," + json3.toString() + "]"; 
    response.getWriter().write(json.toString());
    

    您构建的字符串json 已经是一个字符串,因此您无需再次调用toString()。做吧:

    String json = "["+ json1.toString() + "," + json2.toString() + "," + json3.toString() + "]"; 
    response.getWriter().write(json);
    

    【讨论】:

    • 我故意添加了 toString() 因为我收到了这个错误:GET localhost:8080/DataDictionary-v1.1.2/css/images/… 404 (Not Found) (Javascript 控制台)。当我放置 toString() 时,它不会发生。不知道为什么。
    • 不确定写入 JSON 响应与某些 CSS 图像文件上的 404 错误有什么关系。
    【解决方案3】:

    我试图做同样的事情。我想将三个 json 对象传递给我的 javascript。我尝试将三个 json 对象组合成一个 json 数组并传递它,但它使情况变得非常复杂。

    我发现传递一个由我选择“%”的字符分隔的字符串要容易得多。

        String json1 = "....";
        String json2 = "....";
        String json3 = "...";
        String toApp = json1 + "%" + json2 + "%" + json3;
    

    然后在javascript中你可以用

    分割文本
    var split = line.split("%");
    

    最后可以从split[0]、split[1]和split[2]组成一个json对象。

    【讨论】:

      【解决方案4】:
       var c1= new Object();
      c1.property1="test";
      c1.property2="test";
      
      var c2= new Object();
      c2.property1="test";
      c2.property2="test";
      
      var data = { 'c1': c1, 'c2': c2 };
      var parameters1 = JSON.stringify(data);
      
      In ajax call pass parameters1 as data.
        [WebMethod]
        public static bool TestMethod(Object c1, Object c2)
        {
        }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-02-03
        • 2017-11-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-10-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多