2012-06-01 38 views
2

我是一个应用程序的开发人员,除了其主要目的外,还包含一个RESTful Web服务以允许外部应用程序与其进行交互。我还将一个Web UI作为应用程序的一部分用于配置和使用目的。我想使用内置的Web服务来实现Web UI和使用Ajax调用的应用程序之间的交互。问题是我不能让我的jQuery代码的Web服务调用,因为用户可以从任何地方访问Web UI,它不会知道没有手动编辑代码的Web服务的正确地址?有没有好的办法来克服这个障碍? Web UI通过JavaScript与应用程序内置的Web服务进行通信一定是非常普遍的。如何使用jQuery对本地Web服务进行RESTful调用

这是我目前使用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服务避免的。

回答

3

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

的 'http://192.168.xx:?8732/API /对象/类型/位回调= ...'

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

如果您希望将其提供给“其他”人,您将不得不发布您的web服务,就像发布网站一样。从该路由器转发到该计算机的端口..并使用您的外部IP地址和/或DNS来击中它。

更新:

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

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

这是有道理的,如果我是唯一一个托管Web服务。安装我的应用程序的每个用户都将拥有自己的Web服务来与他们自己的应用程序进行通信。用你的建议,每个用户需要修改他们自己的系统的jQuery代码,这正是我想要避免的。 – Brian

+0

您的最新更新正是我所需要的。谢谢! – Brian

1

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

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

当浏览器解释这个地址,这将解决使用该URL的上下文 - 当前页面的地址 - 并自动与相应的协议,主机名/ IP和端口前面加上它。

+0

这将要求我让Web服务和Web服务器托管监听同一端口的页面。真的吗?现在,Web服务与Web服务器分开托管,并将Web UI托管在另一个端口上。 – Brian