gpt4 book ai didi

grails - “render as JSON”将JSON显示为文本,而不是按预期将其返回给AJAX调用

转载 作者:行者123 更新时间:2023-12-02 15:12:11 25 4
gpt4 key购买 nike

我导航到indexMyController操作。 index页面上的某些代码正在AJAX回调myAction中的MyController。我希望myAction操作将一些数据作为JSON返回到我的AJAX调用中,这样我就可以在数据客户端进行一些操作,但是不是像我想要的那样将数据作为JSON返回,而是将数据显示为文本。

我的Grails Controller 的示例:

class MyController {
def index() {
render( view: "myView" )
}

def myAction {
def mapOfStuff = [ "foo": "foo", "bar": "bar" ]
render mapOfStuff as JSON
}
}

我的JavaScript示例:
$( function() {
function callMyAction() {
$.ajax({
dataType: 'json',
url: base_url + '/myController/myAction',
success: function( data ) {
$(function() {
if( data.foo ) {
alert( data.foo );
}
if( data.bar ) {
alert( data.bar );
}
});
}
});
}
});

我期望的是我的页面将呈现,然后将调用我的JavaScript,然后将显示两个警报。相反,JSON数组在我的浏览器窗口中显示为文本:
{"foo":"foo","bar":"bar"}

此时,我地址栏中的URL的最后一段是 myAction而不是 index。现在,如果我手动输入索引页面的URL并按刷新,则所有操作都将按预期进行。

我有完全相同的方法打了六个AJAX call ,但都没有问题。这是怎么回事?

更新1:

我注意到了当我在 indexMyController操作中设置一个断点,并在 myAction Action 中设置另一个断点时,即使我导航到 myAction,在登录后立即在 index的断点之前命中 index的断点。实际上, index操作中的断点永远不会命中。这显然更接近我的问题的根本原因,但是为什么会发生呢?

更新2:

我正在使用Spring Security,我注意到即使我将默认URL设置为...
grails.plugins.springsecurity.successHandler.defaultTargetUrl = '/myController'

...登录时 MyController的“索引”操作中的断点永远不会被击中,但是 myView正确呈现。 Spring Security在做什么,可以通过我的 Controller 加载我的 View 而又是什么呢?

更新#3:

我已经找到了解决该问题的方法,问题是Spring Security在后台做了一些奇怪的事情。所以我只是将 alwaysUseDefault添加到我的配置中并将其设置为true,如下所示:
grails.plugins.springsecurity.successHandler.alwaysUseDefault = true

现在,我击中 indexMyController Action 中设置的断点,然后才击中 myAction中的断点,就像我期望的那样。不幸的是,此解决方案不是最佳解决方案,因为即使用户试图导航到其他页面,现在也总是在登录后将其重定向到 defaultTargetUrl

尽管这种解决方案可以解决我的问题,但它提出了一个问题,Spring Security如何重定向到我的 defaultTargetUrl,它被设置为这样……
grails.plugins.springsecurity.successHandler.defaultTargetUrl = '/myController'

...无需经历 indexMyController操作?

最佳答案

尝试使用:

def mapOfStuff = [ foo: "foo", bar:"bar"]

而不是将这些键用作Groovy字符串。

关于grails - “render as JSON”将JSON显示为文本,而不是按预期将其返回给AJAX调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12904820/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com