使用https://github.com/dcodeIO/ProtoBuf.js/我将要发送到java服务器的消息编码为名为batch的ByteBuffer:
batch:
ByteBuffer {array: ArrayBuffer, view: DataView, offset: 0, markedOffset: -1, length: 139…}
array: ArrayBuffer
length: 139
littleEndian: false
markedOffset: -1
offset: 0
view: DataView
__proto__: Object
现在我想用jquery的Ajax发送它:
$.ajax({
url: myUrl,
type: 'POST',
data : batch,
contentType: 'application/protobuf',
accept: 'application/json'
})
但我似乎无法做到这一点。上面的代码给了我jquery异常:
Uncaught TypeError: Cannot set property 'littleEndian' of undefined myScript.js:1353
ByteBuffer.LE bunk.js:1353
jQuery.param.add jquery.js:7203
buildParams jquery.js:7261
jQuery.param jquery.js:7223
jQuery.extend.ajax
如果我从批处理中获取数组缓冲区(batch.toArrayBuffer()),Java服务器什么也得不到
ByteStreams.toByteArray(req.getInputStream());
如何将ByteBuffer编码为这样发送?我应该如何将其解码为java字节数组?
答案 0 :(得分:1)
不确定您是否找到了解决方案,但Google协议缓冲区现在附带了javascript编译器。
一旦构建了要与proto构建器一起发送的对象,就可以使用以下命令使用jQuery发送数据:
<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#MyModal<?php echo $object['id']?>">
Details
</button>
ProcessData:false 必要,以避免jQuery在后台序列化数据。
答案 1 :(得分:0)
来自JQuery关于ajax(http://api.jquery.com/jquery.ajax/)的文档:
注意:W3C XMLHttpRequest规范规定charset始终为UTF-8;指定另一个字符集不会强制浏览器更改编码。
你可能试图从你的protobuffer发送原始二进制字节,这与UTF-8不兼容。
我不熟悉ProtoBuf.js,但是从网上挖掘一下,看起来有一种toBase64()方法可用于将protobuf编码为base64字符串。尝试使用该方法获取要发送的数据,然后在服务器上从base64解码。