Javascript - parseInt为WebSocket数据返回奇怪的值

时间:2015-08-13 10:00:51

标签: javascript websocket parseint

使用parseInt()时,我遇到了一些奇怪的行为。

webSocket.onmessage = function (event) {
    var raw = event.data;
    alert(raw);
    var data = raw.split(":");

    alert("lat:\"" + data[0] + "\" lon:\"" + data[1] + "\"");

    var x = parseInt(data[0]);
    var y = parseInt(data[1]);

    alert("lat:" + x + " lon:" + y);
}

第一个警报输出:100:100 - 这是从服务器发送的字符串。

第二个警报输出:lat:“100”lon:“100” - 这很好

但是,第三个警报输出:lat:1 lon:NaN

是什么导致这种情况?

更新

问题是服务器端的编码会产生一些不可见的不需要的字符。我更新了服务器代码,问题就消失了。 Working solution

2 个答案:

答案 0 :(得分:0)

我的猜测是,您的数据中有不可打印的字符,例如空格,制表符等,这就是您在分割后获得NaN的原因。

您可以使用regex获取如下数据。使用这种方式,您不必担心不可打印的字符,因为regex只选择了数字。



var raw = '100:100 ';

var data = raw.match(/\d+/g);

var x = parseInt(data[0], 10);
var y = parseInt(data[1], 10);

document.write('x=' + x + '   y=' + y);




以上regex将从raw字符串中选择所有数字。

答案 1 :(得分:0)

我同意@Tushar。因此,相信某些特殊字符正在raw = even.data;中解析(虽然这里不能复制)

下面的代码似乎工作正常,你可以调整你的并测试它:

<script type="text/javascript">
    var raw = '100 :100asd';
    var data = raw.match(/[0-9]+/gm);

    alert(raw); // console.log(raw);
    var data = raw.split(":");

    alert("lat:\"" + data[0] + "\" lon:\"" + data[1] + "\"");

    var x = parseInt(data[0]);
    var y = parseInt(data[1]);

    alert("lat:" + x + " lon:" + y);
</script>