XMPP - 示例第 3 章“使用 JavaScript 和 jQuery 进行专业 XMPP 编程”不起作用

Posted

技术标签:

【中文标题】XMPP - 示例第 3 章“使用 JavaScript 和 jQuery 进行专业 XMPP 编程”不起作用【英文标题】:XMPP - Example chapter 3 "Professional XMPP Programming with JavaScript and jQuery" doens't work 【发布时间】:2011-05-15 20:51:03 【问题描述】:

我是 XMPP 的新手,我正在编写第一个“HELLO”代码。请花点时间查看以下代码(.zip 在本主题的末尾):

<html>

<head>
<title>Hello - Chapter 3</title>
<style type="text/css">
body 
    font-family: Helvetica;


h1 
    text-align: center;


.hidden 
    display: none;


#log 
    padding: 10px;

</style>
<script language="javascript" type="text/javascript" src="scripts/jQuery.js"></script>
<script language="javascript" type="text/javascript" src="scripts/jQueryUI.js"></script>
<script language="javascript" type="text/javascript" src="scripts/strophe.js"></script>
<script language="javascript" type="text/javascript" src="scripts/flXHR.js"></script>
<script language="javascript" type="text/javascript" src="scripts/strophe.flxhr.js"></script>
<link rel="stylesheet" href="hello.css"></link>
<script language="javascript" type="text/javascript">
var Hello = 
        connection: null,
        log: function(msg) 
        $("#log").append("<p>" + msg + "</p>");
        
    ;

$(document).ready(function() 
    $("#login_dialog").dialog(
        autoOpen: true,
        draggable: false,
        modal: true,
        title: "Connect to XMPP",
        buttons: 
            "Connect": function() 
                $(document).trigger("connect", 
                    jid: $("#jid").val(),
                    password: $("#password").val()
                );
                $("#password").val("");
                $(this).dialog("close");
            
        
    );

    $(document).bind("connect", function(ev, data) 
        var conn = new Strophe.Connection("http://bosh.metajack.im: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");
            
        );
        Hello.connection = conn;
    );

    $(document).bind("connected", function() 
        // Inform the user
        Hello.log("Connection established");
    );

    $(document).bind("disconnected", function() 
        Hello.log("Connection terminated.");
        // Remove dead connection object
        Hello.connection = null;
    );
);
</script>
</head>


<body>
<h1>Hello</h1>
<div id="log"></div>

<!-- Login dialog -->
<div id="login_dialog" class="hidden">
<label>JID:</label><input type="text" id="jid">
<label>Pwd:</label><input type="password" id="password">
</div>

</body>

</html>

根据文档和代码,必须显示“连接已建立”或“连接已终止”。但事实并非如此。我尝试将alert("It runs to here!"); 放在代码的每一行中,它仍然是alert()。当我将它放入 bind("connected") 和 bind("disconnect") 时,它不再发出警报。所以我猜代码不能运行到那里。我以前从来没有做过,而且很少有这方面的文件,所以我现在不知道该怎么办。

问题:请你们看一下,告诉我哪里出了问题?我自己还在调试中!

额外信息:这些是我的 web 文件夹中的内容(我害怕缺少 javascript 框架文件)。所有js文件都是最新版本。

index.html

脚本/

jQuery.js jQueryUI.js strophe.js flensed.js flXHR.js flXHR.swf flXHR.vbs swfobject.js updateplayer.swf checkplayer.js

css/

不重要...

这是我的代码,请花点时间查看:http://xx3004.kodingen.com/XMPP

如果有任何帮助,我将不胜感激。

[x]

【问题讨论】:

你是从本地网络服务器运行这段代码吗? 【参考方案1】:

你的代码没问题, 问题出在为使用 Strophe 建立连接所提供的 URL 中。

var conn = new Strophe.Connection("http://bosh.metajack.im:5280/xmpp-httpbind");

尝试找到服务器的位置,否则在你的机器上本地安装一个xmpp服务器(vysper),并将URL更改为http://localhost:8080/bosh/

也尝试评论 flxhr 包含。

【讨论】:

您好。感谢您的回复。我试图按照这本书“使用 JavaScript 和 jQuery 进行专业 XMPP 编程”中的说明进行操作,并且我很确定我正确地编写了所有代码。我什至在“jwchat.org”测试我的 Jabber 帐户,我可以登录。所以我猜问题出在服务器上?我希望我的项目能够在线工作,所以你能推荐我一个用于实时应用程序的服务器并且它工作正常吗? bosh.metajack.im:5280/xmpp-httpbind 只是不起作用,我想。我将尝试 Apache Vysper。但请帮助我尽可能使其在线。再次感谢。 [x] @priya 我对“flxhr 包含”有一个特别的疑问,你建议注释掉 flxhr 包含,你能告诉我背后的原因是什么,虽然我使用的是本地,但我遇到了同样的问题服务器“localhost:5280/httpbind”,当我注释掉 flxhr 包含时,一切都开始正常工作,根据“专业 XMPP 编程”一书,flxhr.js 及其 strophe 插件用于进行跨平台调用,或者必须使用代理! !!!!!那么这里可能的原因是什么??【参考方案2】:

如果您在 localhost 上运行 Openfire,请确保

bosh_service_url =  'http://127.0.0.1:7070/http-bind/'

var conn = new Strophe.Connection("http://127.0.0.1:7070/http-bind/");

如果您在 localhost 上运行 ejabberd,请确保

bosh_service_url = "http://127.0.0.1:5222/http-bind/"

【讨论】:

以上是关于XMPP - 示例第 3 章“使用 JavaScript 和 jQuery 进行专业 XMPP 编程”不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Oreilly XMPP 示例代码

python 生成ID3决策树的示例代码。参考:机器学习在行动第3章

构建 Android XMPP 即时通讯工具和服务器示例 [关闭]

javascript权威指南第13章 事件示例代码

Ext JS 6学习文档-第3章-基础组件

[架构之路-11]:目标系统 - 架构 - 嵌入式系统软件+硬件的基本通用架构