2

私は、その主な目的に加えて、RESTful Web サービスを含むアプリケーションの開発者であり、外部アプリケーションがそれと対話できるようにします。また、構成と使用を目的として、アプリケーションの一部として Web UI も同梱しています。Web UI と ajax 呼び出しを使用するアプリケーションとの間の対話に、組み込みの Web サービスを使用したいと考えています。問題は、ユーザーがどこからでも Web UI にアクセスでき、コードを手動で編集しないと Web サービスの正しいアドレスがわからないため、jquery コードに Web サービス呼び出しを含めることができないことです。この障害を乗り越える良い方法はありますか? Web UI がアプリケーションの組み込み Web サービスと JavaScript を介して通信することは、かなり一般的です。

以下は、私が現在使用している 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();
  });

ご覧のとおり、Web サービスへのアドレスとして localhost を入力しましたが、これは、サービスと同じマシンから Web UI にアクセスした場合にのみ機能します。これを行うには、他にどのような方法がありますか?ある種のサーバーサイドスクリプトを使用する必要はありませんか? これは、jquery と安らかな 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=?...」

(もちろん、これは同じネットワークからそのコンピューターに接続している場合にのみ機能します。)

「他の」人が利用できるようにする場合は、Web サイトを公開するのと同じように、Web サービスを公開する必要があります。つまり、そのルーターからそのコンピューターにポートを転送し、外部 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 に答える