Amplify.js 当发布和订阅在两个单独的文件中时,发布订阅不起作用
Amplify.js publish subscribe not working when publish and subscribe are in two separate files
我正在尝试让 Amplify.js publish/subscribe 处理 2 个文件。
当代码是一个文件时我可以让它工作,但当发布是
在一个文件中,订阅在另一个文件中。
这是调用订阅和发布的代码
同一个文件。这行得通。
<html>
<head>
<script type="text/javascript" src="./js/jquery-1.8.2.min.js"> </script>
<script
type="text/javascript" src="./js/amplify-1.1.2/amplify.min.js">
</script>
</head>
<body>
<H1>My amp pub/sub page</H1>
<script type="text/javascript">
alert("entering page");
amplify.subscribe("dataExample", function(param) {
alert("In the amplify.subscribe function,
param is: " + param.foo ); } );
alert("after line amplify.subscribe");
result = amplify.publish("dataExample", { foo: "bar" } );
alert ("After amplify.publish, result is " + result );
</script>
</body>
</html>
结果是它按预期打印出警报
顺序,像这样:
'entering page'
'after line amplify.subscribe'
'In the amplify.subscribe function, param is: bar'
'After amplify.publish, result is true'
当我将订阅和发布放在单独的文件中时,
amplify.subscribe 函数将不会被调用。为了这
测试,我有两个浏览器了(都是火狐)。我 运行 订阅了一个
浏览器,然后在另一个上发布。
这是订阅的代码(我只是把发布部分删掉了)
<html>
<head>
<script type="text/javascript" src="./js/jquery-1.8.2.min.js"></script>
<script type="text/javascript" src="./js/amplify-1.1.2/amplify.min.js">
</script>
</head>
<body>
<H1>My amp sub page</H1>
<script type="text/javascript">
alert("entering page");
amplify.subscribe("dataExample", function(param) {
alert("In the amplify.subscribe function, param is: " +
param.foo ); } );
alert("after line amplify.subscribe");
</script>
</body>
</html>
发布代码(我删掉了订阅部分)
<html>
<head>
<script type="text/javascript" src="./js/jquery-1.8.2.min.js"></script>
<script type="text/javascript" src="./js/amplify-1.1.2/amplify.min.js">
</script>
</head>
<body>
<H1>My amp pub page</H1>
<script type="text/javascript">
alert("entering page");
result = amplify.publish("dataExample", { foo: "bar" } );
alert ("After amplify.publish, result is " + result );
</script>
</body>
</html>
我使用的是 firefox 版本 47.0.1
我在使用 Chrome.
时遇到了同样的问题
有人对此有什么想法吗?
有没有人对此有更深入的了解,比如
发布数据存储在哪里?多长时间?
以及如何查看它是否存在。
订阅者在哪里寻找数据?
发布订阅是否适用于两个文件?
发布数据未存储在任何地方。
回调函数已存储。在放大的正常变量内。您可以想象一个以事件名称作为键并将回调函数作为值的映射。
当您使用事件名称发布时,将从地图中检索该事件的回调并使用您传递的数据执行。
这里的问题是映射对于每个页面都是本地的,就像任何其他 JavaScript 变量一样。
- 所以在第一页中只存储了回调,但在同一页中没有调用事件的代码。
- 在您的第二个页面中,由于没有定义回调,因此没有任何东西可以处理该事件。
所以您正在寻找一种跨页面共享 JavaScript 变量的方法。在 SO 中快速搜索显示了一些尝试。我认为他们应该帮助您实现同样的目标:
- browser sessionStorage. share between tabs?
- How to bind to localStorage change event using jQuery for all browsers?
我正在尝试让 Amplify.js publish/subscribe 处理 2 个文件。
当代码是一个文件时我可以让它工作,但当发布是 在一个文件中,订阅在另一个文件中。
这是调用订阅和发布的代码 同一个文件。这行得通。
<html>
<head>
<script type="text/javascript" src="./js/jquery-1.8.2.min.js"> </script>
<script
type="text/javascript" src="./js/amplify-1.1.2/amplify.min.js">
</script>
</head>
<body>
<H1>My amp pub/sub page</H1>
<script type="text/javascript">
alert("entering page");
amplify.subscribe("dataExample", function(param) {
alert("In the amplify.subscribe function,
param is: " + param.foo ); } );
alert("after line amplify.subscribe");
result = amplify.publish("dataExample", { foo: "bar" } );
alert ("After amplify.publish, result is " + result );
</script>
</body>
</html>
结果是它按预期打印出警报
顺序,像这样:
'entering page'
'after line amplify.subscribe'
'In the amplify.subscribe function, param is: bar'
'After amplify.publish, result is true'
当我将订阅和发布放在单独的文件中时, amplify.subscribe 函数将不会被调用。为了这 测试,我有两个浏览器了(都是火狐)。我 运行 订阅了一个 浏览器,然后在另一个上发布。
这是订阅的代码(我只是把发布部分删掉了)
<html>
<head>
<script type="text/javascript" src="./js/jquery-1.8.2.min.js"></script>
<script type="text/javascript" src="./js/amplify-1.1.2/amplify.min.js">
</script>
</head>
<body>
<H1>My amp sub page</H1>
<script type="text/javascript">
alert("entering page");
amplify.subscribe("dataExample", function(param) {
alert("In the amplify.subscribe function, param is: " +
param.foo ); } );
alert("after line amplify.subscribe");
</script>
</body>
</html>
发布代码(我删掉了订阅部分)
<html>
<head>
<script type="text/javascript" src="./js/jquery-1.8.2.min.js"></script>
<script type="text/javascript" src="./js/amplify-1.1.2/amplify.min.js">
</script>
</head>
<body>
<H1>My amp pub page</H1>
<script type="text/javascript">
alert("entering page");
result = amplify.publish("dataExample", { foo: "bar" } );
alert ("After amplify.publish, result is " + result );
</script>
</body>
</html>
我使用的是 firefox 版本 47.0.1
我在使用 Chrome.
有人对此有什么想法吗?
有没有人对此有更深入的了解,比如
发布数据存储在哪里?多长时间?
以及如何查看它是否存在。
订阅者在哪里寻找数据?
发布订阅是否适用于两个文件?
发布数据未存储在任何地方。
回调函数已存储。在放大的正常变量内。您可以想象一个以事件名称作为键并将回调函数作为值的映射。
当您使用事件名称发布时,将从地图中检索该事件的回调并使用您传递的数据执行。
这里的问题是映射对于每个页面都是本地的,就像任何其他 JavaScript 变量一样。
- 所以在第一页中只存储了回调,但在同一页中没有调用事件的代码。
- 在您的第二个页面中,由于没有定义回调,因此没有任何东西可以处理该事件。
所以您正在寻找一种跨页面共享 JavaScript 变量的方法。在 SO 中快速搜索显示了一些尝试。我认为他们应该帮助您实现同样的目标:
- browser sessionStorage. share between tabs?
- How to bind to localStorage change event using jQuery for all browsers?