私はこれを機能させようとしましたが、失敗しました。コードは最初のクリックで正しく動作するように見えますが、数回クリックすると、両方の if 条件がランダムに出力される回数が増えます。
サーバー側ではNode.jsを使用しています
var sys = require('sys');
var net = require('net');
var mqtt = require('mqttclient');
var io = require('socket.io').listen(5000);
var client = new mqtt.MQTTClient(1883, '192.168.1.33', 'SERVER NODO');
io.sockets.on('connection', function (socket) {
socket.on('subscribe', function (data) {
console.log('Subscribing to '+data.topic);
client.subscribe(data.topic);
});
});
io.sockets.on('connection', function (socket) {
socket.on('publish', function (data){
console.log('publishing to '+data.topic);
client.publish(data.topic,data.payload);
});
});
//Sends to Web
client.addListener('mqttData', function(topic, payload){
sys.puts(topic+'='+payload);
io.sockets.emit('mqtt',{'topic':String(topic),
'payload':String(payload)});
});
クライアント側には、このページがあり、正しくロードされます。最初の if ブロックは問題ないようですが、問題が発生している 2 番目のブロックです。プログラミング未経験ですが、一生懸命勉強中です!
これを機能させるために、すでにさまざまな組み合わせを試しました (たとえば、if 条件の後に on click を配置しましたが、同じ結果になりました。
<link rel="stylesheet" href="style2.css">
<script type="text/javascript" src="http://192.168.1.33:5000/socket.io/socket.io.js</script>
<script type="text/javascript" src="jquery-1.8.3.js"></script>
<script type="text/javascript">
var socket = io.connect('http://192.168.1.33:5000');
$(document).ready(function(){
socket.on('connect', function () {
socket.on('mqtt', function (msg) {
console.log(msg.topic+' '+msg.payload);
var classe = 0;
if (msg.topic == "uno"){
if (msg.payload == "a")
$('#button').addClass('on');
classe = 1;
if (msg.payload == "b")
$('#button').removeClass('on');
casse = 0;
}
$('#button').on('click', function(){
if (classe == 1)){
classe = 3;
socket.emit('publish',{topic:"unor", payload:"off"});
}
if (classe == 0){
classe = 3;
socket.emit('publish',{topic:"unor", payload:"on"});
}
});
});
socket.emit('subscribe',{topic:"uno"});
});
</script>
<tbody>
<section>
<a href="#" id="button"></a>
<span></span>
</section>
</tbody>