2

我是一个应用程序的开发者,除了它的主要用途之外,它还包含一个 RESTful Web 服务,以允许外部应用程序与之交互。我还提供了一个 Web UI 作为应用程序的一部分,用于配置和使用目的。我想使用内置的 Web 服务在 Web UI 和使用 ajax 调用的应用程序之间进行交互。问题是我不能在我的 jquery 代码中调用 Web 服务,因为用户可以从任何地方访问 Web UI,并且如果不手动编辑代码就不会知道 Web 服务的正确地址?有没有克服这个障碍的好方法?让 Web UI 通过 javascript 与应用程序的内置 Web 服务进行通信一定很常见。

这是我目前正在使用的 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 和 restful web 服务来避免的。

4

2 回答 2

3

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

'http://192.168.xx:8732/api/objects/type/place?callback=?...'

(当然,这仅在您从同一网络连接到该计算机时才有效。)

如果您希望将其提供给“其他”人,您必须像发布网站一样发布您的网络服务..即从该路由器将端口转发到该计算机..并使用您的外部 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=?', ...
于 2012-06-01T01:58:45.107 回答
1

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

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

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

于 2012-06-01T02:08:07.510 回答