0

Strophe.Connection オブジェクトを作成および初期化するために Strophe.Connection を使用し、'connect' 関数を使用して接続プロセスを開始しますが、本で期待されているように CONNECTED ではなく ATTACHED ステータスを返します。

このコードは、Jack Moffitt の「JavaScript と JQuery を使用したプロフェッショナルな XMPP プログラミング」からのものですが、私にはうまくいきません :-(

私はそれで一日中過ごしました、そして私は大きな頭痛がしています。どんな助けでも感謝します。ありがとうございました、

コードは次のとおりです。

$(document).bind('connect', function (ev, data) {
    var conn = new Strophe.Connection(
        "http://localhost:5280/xmpp-httpbind");
    conn.connect(data.jid, data.password, function (status) {
        if (status === Strophe.Status.CONNECTED) {
            $(document).trigger('connected');
        } else if (status === Strophe.Status.DISCONNECTED) {
            $(document).trigger('disconnected');
        } 
    });

何が起こっているのかを理解するために、コードを次のように変更しました(接続ステータスを使用):

$(document).bind('connect', function (ev, data) {
    var conn = new Strophe.Connection(
        "http://localhost:5280/xmpp-httpbind");
    conn.connect(data.jid, data.password, function (status) {
        if (status === Strophe.Status.CONNECTED) {
            $(document).trigger('connected');
        } else if (status === Strophe.Status.DISCONNECTED) {
            $(document).trigger('disconnected');
        } else if (status === Strophe.Status.ERROR) {
            alert ('status ERROR');
        } else if (status === Strophe.Status.CONNECTING) {
            alert ('status CONNECTING');
        } else if (status === Strophe.Status.CONNFAIL) {
            alert ('status CONNFAIL');
        } else if (status === Strophe.Status.AUTHENTICATING) {
            alert ('status AUTHENTICATING');
        } else if (status === Strophe.Status.AUTHFAIL) {
            alert ('status AUTHFAIL');
        } else if (status === Strophe.Status.ATTACHED);
            alert ('status ATTACHED');

それは私に2つのステータスを示しています:接続中、次に接続中。本で期待されているように CONNECTED ステータスを取得できないのはなぜですか ???

4

3 に答える 3

0

これを診断するには、より多くの情報が必要です。FirefoxまたはChromeで実行し、開発者ツールでネットワークパネルを表示して、実際に発生しているエラーを確認してみてください。

これは単なるクロスドメインリクエストの問題だと思います。

于 2012-02-26T16:00:03.953 に答える
0

「メタジャック」の提案に行きます。Chrome ネットワーク パネルを使用したことはありませんが、Firefox では、firebug が非常に便利です。firebug をインストールしたら、あとは「すべてのパネルを有効にする」だけです。「ネット」タブの下には、送受信するすべてのリクエストがあります。「ネット」の下の「すべて」タブは基本的に、firebug がすべてのネットワーク アクティビティを表示する場所です。リストの一番下に、http-bind リクエストが表示されている必要があります (私のラップトップでは、Apache で BOSH をセットアップしており、プロキシは「http-bind」として設定されています。正確なアドレスは設定によって異なります)。 . http-bind ノードを展開し、[投稿] タブを選択します。そこで、HTTP Post リクエストを確認できます。ここで、[応答] をクリックすると、XMPP サーバーから取得した応答が表示されます。

于 2012-04-13T08:52:34.983 に答える
0

リクエストを http-bind にリダイレクトする新しいルールを .htaccess に追加することで、Strophe を Openfire サーバーで動作させることができました。

RewriteRule http-bind/ http://www.mydomain.info:7070/http-bind/ [P]

JS コード:

var DEV = {};
var jq  = jQuery;
DEV.APP = {};
var BOSH_SERVICE = 'http://www.mydomain.info/http-bind/';
var connection = null;

function log(msg) 
{
    jq('body').append('<div></div>').append(document.createTextNode(msg));
}

function rawInput(data)
{
    log('RECV: ' + data);          
}

function rawOutput(data)
{
    log('SENT: ' + data);
}

function onConnect(status)
{
    if (status == Strophe.Status.CONNECTING) {
        log('Strophe is connecting.');
    } else if (status == Strophe.Status.CONNFAIL) {
        log('Strophe failed to connect.');
    } else if (status == Strophe.Status.DISCONNECTING) {
        log('Strophe is disconnecting.');
    } else if (status == Strophe.Status.DISCONNECTED) {
        log('Strophe is disconnected.');
    } else if (status == Strophe.Status.CONNECTED) {
        log('Strophe is connected.');
        // connection.disconnect();
    }
}

jq(document).ready(function () {
    connection = new Strophe.Connection(BOSH_SERVICE);
    connection.rawInput = rawInput;
    connection.rawOutput = rawOutput;

    connection.connect("username", "password", onConnect);
});

注として、クロスドメイン ポリシーは、同じドメインにあるが異なるポートにあるリソースにアクセスしようとした場合でも適用されます。

お役に立てれば。

編集:私の .htaccess は次のようになります:

Options +FollowSymLinks
RewriteEngine On

RewriteBase /

RewriteRule http-bind/ http://www.domain.info:7070/http-bind/ [P]
于 2012-02-27T18:40:18.553 に答える