1

我正在尝试使用 ajax 和 grails。这个页面应该是独立的,所以我不能使用gsp标签,只能使用纯HTML。

<head>
    <title>Teste</title>
    <script src="http://code.jquery.com/jquery-1.7.2.min.js"></script>

</head>
<body>
    <form>
        <fieldset>
            <legend>Test</legend>
            <label>User:
                <input type="text" name="username" />
            </label>
            <label>Code:
                <input type="text" name="code" />
            </label>
            <input type="submit" value="Enviar" />
        </fieldset>
    </form>
<script>

    $("form").submit(function() {
        $.ajax({
          type: "POST",
          url: "http://localhost:9091/teste/paciente/index",
          dataType: "text",
          data: $(this).serialize(),
          success: function(data) {alert("oi")},
          error:function (xhr, ajaxOptions, thrownError){
            alert(xhr.status);
            alert(thrownError);
          }  

        })
        return false;
    })
</script>
</body>

圣杯

 class PacienteController {

        def index = {
            def username = params.username
            def code = params.code

            //response.contentType = "application/"
            render text: 'sent successfully', contentType: 'text/plain'

        }
    }

我可以调试我的控制器,但在那之后,我从 jQuery 中得到一个错误(空消息)。我不知道 Grails 在幕后做了什么,但根本无法返回数据。我错过了什么?

4

1 回答 1

3

这是一个跨域 AJAX 问题。标准 AJAX 仅限于将数据返回到与请求相同的域。您可以使用 JSONP 来解决这个问题,但您必须将数据作为 JSON 返回。

所以你可以改变你的控制器来做到这一点:

def result = ['status': 'sent successfully']
render "${params.callback}(${result as JSON})"

params.callback里面有一个由请求自动创建和发送的回调函数。

就请求而言,我认为您所要做的只是修改,dataType: 'jsonp'但无论如何我都不是这方面的专家。如果您需要更多信息,请参阅jQuery 文档...

于 2012-08-02T06:27:27.067 回答