Jas*_*n S 7 java ajax jquery protocol-buffers arraybuffer
使用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
Run Code Online (Sandbox Code Playgroud)
现在我想用jquery的Ajax发送它:
$.ajax({
url: myUrl,
type: 'POST',
data : batch,
contentType: 'application/protobuf',
accept: 'application/json'
})
Run Code Online (Sandbox Code Playgroud)
但我似乎无法做到这一点.上面的代码给了我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
Run Code Online (Sandbox Code Playgroud)
如果我从批处理(batch.toArrayBuffer())获得数组缓冲区,Java服务器什么也得不到
ByteStreams.toByteArray(req.getInputStream());
Run Code Online (Sandbox Code Playgroud)
我应该如何编码ByteBuffer来发送这样的?我应该如何将其解码为java字节数组?
来自 JQuery 关于 ajax 的文档(http://api.jquery.com/jquery.ajax/):
注意:W3C XMLHttpRequest 规范规定字符集始终为 UTF-8;指定另一个字符集不会强制浏览器更改编码。
您可能正在尝试从 protobuffer 发送原始二进制字节,它与 UTF-8 不兼容。
我不熟悉 ProtoBuf.js,但从网上的一点挖掘来看,似乎有一个 toBase64() 方法可用于将 protobuf 编码为 base64 字符串。尝试使用该方法获取要发送的数据,然后在服务器上从 Base64 进行解码。
| 归档时间: |
|
| 查看次数: |
2105 次 |
| 最近记录: |