2013-04-18 6 views
20

私はJetty 8サーバを稼働させています(うまくいけば、すぐにWebソケットがあります)。私はAJAX呼び出しでサーバーにいくつかのデータを送信したい場合はWebSocketを現在のサーバに向ける方法

、私はこれを行うことができます。

$.ajax({ url: "ajax?a=getSomeData" }); 

をこのシナリオでは、私は192.168.1.100で私のサーバーに接続する場合、実際のURLをどこがしますからデータを取得する、192.168.1.100/ajax?a=getSomeDataになりますが、同じソフトウェアを実行している別のサーバーに192.168.1.200で接続すると、URLは192.168.1.200/ajax?a=getSomeDataになります。

しかし、私はWebSocketをを使用して同じことを達成したい場合は、私はそれを行う方法を見つけることができません。

var socket = new WebSocket('ws://www.example.com/'); 

作品。 AJAXリクエストのように - - 私は192.168.1.100で私のサーバに接続している場合、URLは192.168.1.100/sockets?a=getSomeDataとなり、わたしは192.168.1.200に接続する場合、URLは意志

var socket = new WebSocket('ws://sockets?a=getSomeData'); 

だから:しかし、私は相対URLのような何かをしたいです192.168.1.200/sockets?a=getSomeDataとなります。

どうすればこの問題を解決できますか?

答えて

35

ただ、URLを自分で構築する:

var socket = new WebSocket("ws://" + location.host + "/whatever"); 

locationオブジェクトは、windowオブジェクトのプロパティであるため、世界的に利用可能です。

ポートを持たないホストのみを取得するには、代わりにlocation.hostnameを使用します。 websocketサーバが、例えば別のポートでリッスンする場合。

また、あなたは(httpが使用されている)wsshttpsを使用する場合)またはwsに接続する必要があるかどうかを知るためにlocation.protocolを検査することができます。

+12

変更する必要がある場合は、 'location.host'のポート番号を切り捨ててください。代わりに 'location.hostname'が動作します。 – jocull

+0

あなたはお手伝いできますか?私は私のウェブサイトにインスタントメッセージング機能を追加したいと思います。私のドメインは共有ホスティングにあり、彼らは自分のドメインにウェブソケットを置くことができないと言ってきました。私は自分の目的のために接続する自由に利用可能なWebソケットのURLがあるのだろうか?私は本当にそれがどのように動作するのか分からないので、本当にWebソケットに新しいです。ありがとう – Sarah

関連する問題