2016-06-19 2 views
-2

я получаю следующее сообщение об ошибке:JSON.parse() Javascript Неожиданный маркер {

undefined:2 
{"data":{"my":88.43869018554688,"mx":-293.594970703125},"id":2} 
^ 
SyntaxError: Unexpected token { 
    at Object.parse (native) 
    at Socket.<anonymous>(/home/lchost/fishy.io/server/custom_modules/game.js:34:23) 

мой код на сервере:

socket.on('data', function(data) { 
    console.log(data.toString()); 
    var json = JSON.parse(data.toString()); 
    ... 

код на андроид клиента:

public class TouchEventObject implements JSONable { 

public float mx; 
public float my; 

public TouchEventObject(float mx, float my) { 
    this.mx = mx; 
    this.my = my; 
} 

@Override 
public JSONObject toJSON() { 
    JSONObject json = new JSONObject(); 
    try { 
     json.put("mx", mx); 
     json.put("my", my); 
    } catch(Exception e) {}; 
    return json; 
} 
} 

и :

@Override 
public boolean onTouchEvent(MotionEvent event) { 

    if(world != null && me != null && canvas_width != -1 && canvas_height != -1) { 
     Camera camera = Camera.getInstance(); 
     float x = camera.getX() <= 0 ? event.getX() - me.x*camera.getScale() : camera.getX() >= world.WIDTH - canvas_width ? ((world.WIDTH - canvas_width) + event.getX()) - me.x*camera.getScale() : event.getX() - canvas_width/2; 
     float y = camera.getY() <= 0 ? event.getY() - me.y*camera.getScale() : camera.getY() >= world.HEIGHT - canvas_height ? ((world.HEIGHT - canvas_height) + event.getY()) - me.y*camera.getScale() : event.getY() - canvas_height/2; 

     if (client != null && client.isConnected()) { 
      JSONObject json = new TouchEventObject(x, y).toJSON(); 
      client.sendMessage(PacketType.MOUSEMOVE, json); 
     } 
    } 

    return true; 
} 

любые идеи, что может вызвать проблему ??? это действительно странно, потому что несколько раз это не вызывает ошибку, но после 3 или 4 успешно обработанных передач сокетов это не сработает. заблаговременно

+0

Почему бы вы пометить его с [JavaScript] .. – nicael

+2

JSON строки + строка JSON?! = действительный JSON. Вы не можете просто разобрать две строки JSON сразу. –

+0

Что является результатом 'console.log (data.toString());' – mhu

ответ

0

Фактически @Mr. Лама была права. мой код просто послал два JSONs в одном сообщении ... Я положил Thread.sleep(100) в код, который обрабатывает сенсорное событие:

@Override 
public boolean onTouchEvent(MotionEvent event) { 

    if(world != null && me != null && canvas_width != -1 && canvas_height != -1) { 
     Camera camera = Camera.getInstance(); 
     float x = camera.getX() <= 0 ? event.getX() - me.x*camera.getScale() : camera.getX() >= world.WIDTH - canvas_width ? ((world.WIDTH - canvas_width) + event.getX()) - me.x*camera.getScale() : event.getX() - canvas_width/2; 
     float y = camera.getY() <= 0 ? event.getY() - me.y*camera.getScale() : camera.getY() >= world.HEIGHT - canvas_height ? ((world.HEIGHT - canvas_height) + event.getY()) - me.y*camera.getScale() : event.getY() - canvas_height/2; 

     if (client != null && client.isConnected()) { 
      JSONObject json = new TouchEventObject(x, y).toJSON(); 
      client.sendMessage(PacketType.MOUSEMOVE, json); 
      try { 
       Thread.sleep(100); 
      } catch(Exception e) {} 
     } 
    } 

    return true; 
} 
Смежные вопросы