b4j jquery websockets库发送数据问题

时间:2015-10-31 23:37:24

标签: javascript jquery websocket b4j

我正在寻找关于如何使用自定义库发送数据的指针,该自定义库连接到作为websocket服务器运行的java服务器。

用于连接的代码是成功的

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
    <script src="b4j_ws.js"></script>
           <script>
      // connection to websocket
      $( document ).ready(function() {
        b4j_connect("/push/ws");
    });
    </script>

这是我的猜测,以及如何使用图书馆发送数据,目前该图书馆不正确,信息将是&#39; wwww&#39;发送成功后。

<script>
        b4j_ws.send(JSON.stringify({"type":"data","data":"wwww"}));
    </script>

这些是我从工作示例中捕获的帧,但它使用了一个按钮,我只想使用jquery

{&#34;类型&#34;:&#34;事件&#34;&#34;事件&#34;:&#34; btnsend_click&#34;&#34; PARAMS&#34;:{ #&34;其中&#34;:1,&#34;目标&#34;:&#34; btnsend&#34;&#34; pageX属性&#34;:31,&#34; pageY&#34;:19 &#34; metaKey&#34;:假}}
 {&#34; ID&#34;:&#34;#TXT&#34;&#34;方法&#34;:&#34; VAL&#34;&#34; VLAN时&#34;:&#34 ; runmethodWithResult&#34;}  {&#34;类型&#34;:&#34;数据&#34;&#34;数据&#34;:&#34; WWWW&#34;}

上面代码中的b4j_ws.js库。

 //B4J WebSockets client library v0.9

/*jslint browser: true*/
/*global $, jQuery, WebSocket*/
/*jshint curly: false */
"use strict";
var b4j_ws;
var b4j_closeMessage = false;
//only called as a result of a server request that is waiting for result.
//this method should not be called in any other case.
function b4j_sendData(data) {
    b4j_ws.send(JSON.stringify({type: "data", data: data}));
}
function b4j_raiseEvent(eventName, parameters) {
    try {
        if (b4j_ws.readyState !== 1) {
            if (b4j_closeMessage === false) {
                window.console.error("connection is closed.");
                window.alert("Connection is closed. Please refresh the page to reconnect.");
                b4j_closeMessage = true;
            }
        } else {
            b4j_ws.send(JSON.stringify({type: "event", event: eventName, params: parameters}));
        }
    } catch (e) {
        window.console.error(e);
    }
}
function b4j_addEvent(selector, event, eventName, preventDefault) {
    var obj = $(selector);
    if (obj.length > 0) {
        obj.on(event, function (e) {
            if (preventDefault) {
                e.preventDefault();
                e.stopPropagation();
            }
            b4j_raiseEvent(eventName, {which: e.which, target: e.target.id, pageX: e.pageX, pageY: e.pageY, metaKey: e.metaKey});
        });
    }
}
function b4j_addAutomaticEvents(data) {
    $.each(data, function (index, value) {
        b4j_addEvent("#" + value.id, value.event, value.id + "_" + value.event, true);
    });
}
function b4j_runFunction(func, params) {
    return window[func].apply(null, params);
}

function b4j_eval(params, script) {
    var f = new Function(script);
    return f.apply(null, params);
}

function b4j_connect(absolutePath) {
    if (typeof WebSocket === 'undefined') {
        window.alert("WebSockets are not supported by your browser.");
        return;
    }
    var l = window.location, fullpath;
    fullpath = ((l.protocol === "https:") ? "wss://" : "ws://") + l.hostname + ":" + l.port + absolutePath;
    b4j_ws = new WebSocket(fullpath);
    b4j_ws.onmessage = function (event) {
        var ed = JSON.parse(event.data);
        if (ed.etype === "runmethod") {
            $(ed.id)[ed.method].apply($(ed.id), ed.params);
        } else if (ed.etype === "runmethodWithResult") {
            b4j_sendData($(ed.id)[ed.method].apply($(ed.id), ed.params));
        } else if (ed.etype === "setAutomaticEvents") {
            b4j_addAutomaticEvents(ed.data);
        } else if (ed.etype === "runFunction") {
            b4j_runFunction(ed.prop, ed.value);
        } else if (ed.etype === "runFunctionWithResult") {
            b4j_sendData(b4j_runFunction(ed.prop, ed.value));
        } else if (ed.etype === "eval") {
            b4j_eval(ed.value, ed.prop);
        } else if (ed.etype === "evalWithResult") {
            b4j_sendData(b4j_eval(ed.value, ed.prop));
        } else if (ed.etype === "alert") {
            window.alert(ed.prop);
        }

    };
}

1 个答案:

答案 0 :(得分:0)

我将click方法更改为java webserver中的onload方法,并且它有效!