0

我有这个 ajax 代码:

$.ajax({
       type: "POST",
       url: "${createLink(controller:'MyController', action:'downloadFile') } target=\"_blank\" ",
       data: {'names':JSON.stringify(names)},
       dataType: 'json'
});

调用此控制器方法,该方法有效

def downloadFile =
{
    List<JSON> Mynames = JSON.parse(params.names)
    Mynames.each{println "MY ID is: $it"}

    [Mynames:Mynames]
}

它会打印出 MY ID Is Lines,但不会呈现如下所示的 downloadFile 视图:

<%@ page contentType="text/html;charset=UTF-8" %>
<html>
   <head>
    <title></title>
   </head>
   <body>
    test
   </body>
</html>

但是,它没有渲染它。我怎样才能解决这个问题?谢谢。

4

1 回答 1

1

请花一些时间阅读 Ajax 及其用途和工作原理。你有一个根本性的误解。

$.ajax({
       type: "POST",
       url: "${createLink(controller:'MyController', action:'downloadFile') } target=\"_blank\" ",
       data: {'names':JSON.stringify(names)},
       dataType: 'json'
});

上面的代码向您的控制器提交请求。这是关键点;它不会刷新您的页面或在您的页面上放置任何数据。它仅在 JavaScript 中向您返回数据。

您的控制器甚至没有根据您的 $.ajax() 函数dataType参数返回正确的响应。该dataType属性告诉 $.ajax() 函数期望什么样的数据作为响应。

jQuery $.ajax() 文档

如果您需要呈现 HTML 作为对 ajax 请求的响应,最简单的方法是使用$.load()函数。

还有一些其他的方法,但为了让你保持简单,我不会在这里讨论它们。说真的,不要试图变得粗鲁,但我已经阅读了你的其他一些问题。您确实需要更好地了解您正在使用的工具。

于 2013-01-23T02:23:56.307 回答