【问题标题】:Getting Node Object through Ajax call in SpringSpring中通过Ajax调用获取Node对象
【发布时间】:2013-04-23 12:47:23
【问题描述】:

我正在使用带有 Ajax 的 Spring。通过 Ajax,我调用了一个控制器方法,在该方法中我加载了一个 xml 文件并对其进行解析。我想将解析后的节点(对象)传递给 html 页面,作为对 Ajax 调用的响应。

这是我的 Ajax 调用

$.ajax({
        url: "query1",
        type: "POST",
        //dataType: "xml",
        success: function(data) {
            alert("in jax response");
            alert("DATA" + data);
          // parseXml(data);
        }
    }); 

这是我的控制器方法

@RequestMapping(value = "/query1", method = RequestMethod.POST)
public @ResponseBody Node executeQuery1(ModelMap model) throws ParserConfigurationException, SAXException,IOException, XPathExpressionException {
        // Standard of reading a XML file
          DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
          factory.setNamespaceAware(true);
          DocumentBuilder builder;
          Document doc = null;
          XPathExpression expr = null;
          builder = factory.newDocumentBuilder();
          String filepath = "C:\\test.xml";
          System.out.println("PATH: " + filepath);
          doc = builder.parse(filepath);

          // Create a XPathFactory
          XPathFactory xFactory = XPathFactory.newInstance();

          // Create a XPath object
          XPath xpath = xFactory.newXPath();

        // Compile the XPath expression
          expr = xpath.compile("//person[@id=1]");
          // Run the query and get a nodeset
          Object result = expr.evaluate(doc, XPathConstants.NODE);

          // Cast the result to a DOM NodeList
          Node personNode = (Node) result;
          model.addAttribute("xmlnode", personNode);
          System.out.println("model set. going to return");
         return personNode;

    }

如果我返回一个字符串而不是节点,我会收到警报弹出窗口。但是在返回节点对象时它会失败。

我还想在 Javascript 中进一步解析这个节点。所以请让我知道最好的方法。我应该将节点转换为 XML 字符串并返回 XML 字符串吗?

【问题讨论】:

    标签: java ajax spring jquery xml-parsing


    【解决方案1】:

    您可以为返回的对象使用 JSON 格式。例如,使用Jackson JSON API,您可以将对象转换为 JSON 格式并以字符串形式返回。或者,如果您想使用 XML,请将 Node 对象转换为 XML 表示形式并以字符串形式返回。使用 XML 作为字符串,您需要相应地在 AJAX 代码中对其进行解析。

    【讨论】:

      【解决方案2】:

      (我以前的版本假设您将 XML 从客户端传递到服务器)。

      您不能按原样传递 DOM 节点。它不会使用toString 方法进行序列化。

      要传递 DOM 子树,您需要将其解解析回 XML。 "Writing Out a DOM as an XML File" 上的 Java 教程页面有一个示例,它几乎可以完成您正在尝试做的事情。查找标题“写出 DOM 的子树”。 (唯一的区别是您的代码使用 XPath 而不是 DOM API 来定位您想要的节点。)

      或者,您可以通过遍历 DOM 树,将内容提取到新的(非 DOM)对象中,然后以某种方式对这些对象进行序列化,从而“手动序列化”您的节点。例如,您可以构造 JSONObject/JSONArray 实例,然后序列化为 JSON。您在客户端得到的不是 XML。 (这可能是件好事。)

      【讨论】:

      • 简单明了的方法是简单地将 XML 以其原始形式传递给服务器——你的意思是把 XML 以原始形式传递给客户端?如果是,则不能这样做,因为这样做可以在客户端查看整个 xml。存在安全限制,因此需要在服务器端解析 XML。
      猜你喜欢
      • 2017-12-20
      • 2016-06-22
      • 2014-04-08
      • 1970-01-01
      • 2012-02-11
      • 1970-01-01
      • 2021-08-01
      • 2018-06-01
      • 2013-12-12
      相关资源
      最近更新 更多