【问题标题】:How to call Grails web service remotely from different application如何从不同的应用程序远程调用 Grails Web 服务
【发布时间】:2013-03-30 08:55:57
【问题描述】:

我的 Grails 应用程序中有一个 Web 服务方法,它以 json 格式呈现数据。

def getCityListJson(){
    def cityList= City.list() as JSON
    render cityList
}

这基本上是一个控制器动作。

现在我想从我的 PHP 应用程序中调用这个方法

我已经尝试在我的 php 页面中使用 Jquery

   <script type="text/javascript">
      $(function(){
         $("#geCity").click(function(){
             $.getJSON('http://localhost:8080/city/getCityListJson',               
             function(data) {
                console.log(data)
              });
         });
     });
  </script>

但没有得到任何回应..

我是 web 服务概念的新手.. 调用 web 服务的正确方法是什么?

感谢您的帮助。

【问题讨论】:

  • 两个应用程序是在同一个域 (localhost:8080) 上运行还是不同?
  • 您的浏览器控制台出现什么错误?
  • Ajax JSON 不能跨域工作,您应该改用 JSONP。或 CORS
  • 在阅读了您对@Igor 的回复后,如果应用程序在不同的域上运行,您为什么要调用“localhost”,而不是调用运行 Web 服务的主机? [更新] 正如 Igor 提到的,您可能正在寻找 JSONP 或类似的...
  • 如果您的 grails 操作 没有 被调用,那么您的 jQuery 回调中的 URL 不正确。如果您的操作 is 被调用,但 jquery 没有返回 json 数据,那么您遇到了“同源策略”问题,需要使用 JSONP。无论如何,这与您使用的框架(grails/php)无关,您可以考虑编辑您的问题以反映这一点。

标签: jquery web-services rest grails getjson


【解决方案1】:

在您的成功回调中,您尝试记录未声明的json

您已将参数命名为 data。改变它,它应该可以工作:

<script type="text/javascript">
    $(function(){
        $("#geCity").click(function(){
            $.getJSON('http://localhost:8080/city/getCityListJson',               
                function(data) {
                    console.log(data)
            });
        });
    });
</script>

如果这没有记录任何内容,请使用 firebug 或类似的东西检查您与 web 服务的通信。因此,您可以检查请求是否正确发送以及服务器是否按预期发送(JSON)响应。

【讨论】:

  • 您确定调用了该操作吗?您是否在 getCityListJson 操作中检查了 firebug 或添加了一些调试日志记录?
  • 我已经尝试在 grails 中调用 getCityListJson 动作,它工作正常.. 但是当我从外部(来自 Php 应用程序)调用该方法时,不会调用动作..跨度>
  • 那么您的 jquery 代码中有一个错误。是否调用了 click 回调?可能有错字?元素的 id 真的是 geCity 还是你有 getCity
  • 您说:1)您的点击回调被正确调用,2)您的操作在 grails 应用程序中按预期返回 JSON,但 3)您在 AJAX 请求中没有得到任何响应。正确的?萤火虫调试呢?你确定网址正确吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-14
  • 2011-02-25
相关资源
最近更新 更多