如何使用jQuery对本地Web服务进行RESTful调用

时间:2012-06-01 01:50:03

标签: jquery ajax rest

我是一个应用程序的开发人员,除了其主要用途之外,还包含一个RESTful Web服务,允许外部应用程序与之交互。我还将Web UI作为应用程序的一部分进行配置和使用。我想使用内置的Web服务来使用ajax调用来处理Web UI和应用程序之间的交互。问题是我不能将web服务调用放在我的jquery代码中,因为用户可以从任何地方访问Web UI,如果不手动编辑代码,它就不会知道Web服务的正确地址?是否有一个很好的方法来克服这个障碍?通过javascript将Web UI与应用程序的内置Web服务进行通信,这一点非常普遍。

以下是我目前使用的网络服务电话示例:

$.getJSON('http://localhost:8732/api/objects/type/place?callback=?', null, function (data) {
      //$('#callback').html(data);
      $("#callback").append('<ul id="places" data-role="listview" data-theme="g">');
      $.each(data,function(i,obj){
         $("#places").append('<li><a href="#" onclick="openPlace(\''+obj.Name+'\');" >'+obj.Name+'</a></li>');
      });
      $('#places').listview();
  });

正如您所看到的,我刚刚将localhost作为Web服务的地址,但这仅在我从与服务相同的计算机访问Web UI时才有效。我还有什么方法可以做到这一点?不必使用某种服务器端脚本吗?这就是我希望通过使用jquery和一个宁静的Web服务来避免的。

2 个答案:

答案 0 :(得分:3)

&#39;本地主机&#39;只是127.0.0.1的别名,这是您的本地计算机。您的计算机还有一个真实的IP地址,可以在本地网络上识别它。这可能看起来像192.168.x.x.您可以使用该计算机的实际地址与Web服务进行通信:

&#39; HTTP://192.168.x.x:8732 / API /对象/类型/位置回调= ...&#39;

(当然,这仅适用于您从同一网络连接到该计算机的情况。)

如果您希望将其提供给&#34;其他&#34;人们,你必须发布你的网络服务,就像你发布一个网站..我从那个路由器转发到该计算机的端口..并使用你的外部IP地址和/或dns来点击它。

<强>更新

你是如何提供HTML的?如果您的应用程序类似于管理员界面基于Web的路由器,您可以保存/使用主机名并在家中使用您的服务呼叫。连接到管理员webapp是你的客户的责任。所以他们可以使用localhost,127.0.0.1,192.168.1.x,// someservername或其他一些别名的方法。所有你应该关心的是主持人?

var host = window.location.hostname;
$.getJSON('http://' + host + ':8732/api/objects/type/place?callback=?', ...

答案 1 :(得分:1)

使用相对URL而不是绝对URL。当您公开服务并更改其主机名,域或IP地址时,这些URL将保持有效。

$.getJSON('/api/objects/type/place?callback=?', // ...

当浏览器解释此地址时,它将使用该URL的上下文(当前页面的地址)解析,并自动在其前面添加适当的协议,主机名/ IP和端口。