热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

使用ajax向Java服务器发送Proto-buf消息。-UsingajaxtosendaProto-bufmessagetoaJavaserver

Usinghttps:github.comdcodeIOProtoBuf.jsIencodedamessageIwanttosendtoajavaserverto

Using https://github.com/dcodeIO/ProtoBuf.js/ I encoded a message I want to send to a java server to a ByteBuffer called batch:

使用https://github.com/dcodeIO/ProtoBuf.js/ I对我想要发送给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

Now I want to send this with jquery's Ajax:

现在我想用jquery的Ajax来发送这个:

  $.ajax({
    url: myUrl,
    type: 'POST',
    data : batch,
    contentType: 'application/protobuf',
    accept: 'application/json'
  })

But I can't seem to do this. The above code gives me the jquery exception:

但我似乎不能这么做。上面的代码给了我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

If I get an array buffer from batch (batch.toArrayBuffer()) the Java server gets nothing from

如果我从批处理(batch. toarraybuffer())获得一个数组缓冲区,那么Java服务器将一无所获

ByteStreams.toByteArray(req.getInputStream());

How should I encode the ByteBuffer to send like this? And how should I decode it into a java byte array?

如何对ByteBuffer进行编码,以便像这样发送?如何将它解码成java字节数组?

2 个解决方案

#1


0  

From JQuery's documentation on ajax (http://api.jquery.com/jquery.ajax/):

从JQuery的ajax文档(http://api.jquery.com/jquery.ajax/):

Note: The W3C XMLHttpRequest specification dictates that the charset is always UTF-8; specifying another charset will not force the browser to change the encoding.

注意:W3C XMLHttpRequest规范规定字符集总是UTF-8;指定另一个字符集不会强制浏览器更改编码。

You're probably trying to send raw binary bytes from your protobuffer, which is not compatible with UTF-8.

您可能尝试从原始缓冲区发送原始二进制字节,这与UTF-8不兼容。

I'm not familiar with ProtoBuf.js, but from a little digging online it looks like there's a toBase64() method available for encoding the protobuf as a base64 string. Try using that method to get the data to send, and then on the server decode from base64.

我不熟悉神族。js,但是从在线挖掘来看,似乎有一个toBase64()方法可以用来将原buf编码为base64字符串。尝试使用该方法获取要发送的数据,然后在服务器上对base64进行解码。

#2


0  

Not sure if you found a solution but Google Protocol Buffers now come with a Javascript compiler.

不确定是否找到了解决方案,但是谷歌协议缓冲区现在附带了一个Javascript编译器。

Once you have built your object to send with the proto builder, You can send data using jQuery using the following:

一旦您构建了要与proto构建器一起发送的对象,您就可以使用以下方法使用jQuery发送数据:

    $.ajax({
        type: "PUT",
        url: "http://localhost:8088/user",
        data: user.serializeBinary(),
        success: function () {
            $("#message").text("User with key " + user.getApikey() + " saved");
        },
        contentType: "application/x-protobuf",
        processData: false
    });

ProcessData: false is necessary to avoid jQuery serialising the data in the background.

ProcessData:为了避免jQuery在后台序列化数据,必须使用false。


推荐阅读
  • 微信官方授权及获取OpenId的方法,服务器通过SpringBoot实现
    主要步骤:前端获取到code(wx.login),传入服务器服务器通过参数AppID和AppSecret访问官方接口,获取到OpenId ... [详细]
  • Node.js学习笔记(一)package.json及cnpm
    本文介绍了Node.js中包的概念,以及如何使用包来统一管理具有相互依赖关系的模块。同时还介绍了NPM(Node Package Manager)的基本介绍和使用方法,以及如何通过NPM下载第三方模块。 ... [详细]
  • Android实战——jsoup实现网络爬虫,糗事百科项目的起步
    本文介绍了Android实战中使用jsoup实现网络爬虫的方法,以糗事百科项目为例。对于初学者来说,数据源的缺乏是做项目的最大烦恼之一。本文讲述了如何使用网络爬虫获取数据,并以糗事百科作为练手项目。同时,提到了使用jsoup需要结合前端基础知识,以及如果学过JS的话可以更轻松地使用该框架。 ... [详细]
  • 本文介绍了解决Netty拆包粘包问题的一种方法——使用特殊结束符。在通讯过程中,客户端和服务器协商定义一个特殊的分隔符号,只要没有发送分隔符号,就代表一条数据没有结束。文章还提供了服务端的示例代码。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • IjustinheritedsomewebpageswhichusesMooTools.IneverusedMooTools.NowIneedtoaddsomef ... [详细]
  • Android工程师面试准备及设计模式使用场景
    本文介绍了Android工程师面试准备的经验,包括面试流程和重点准备内容。同时,还介绍了建造者模式的使用场景,以及在Android开发中的具体应用。 ... [详细]
  • 本文讨论了在VMWARE5.1的虚拟服务器Windows Server 2008R2上安装oracle 10g客户端时出现的问题,并提供了解决方法。错误日志显示了异常访问违例,通过分析日志中的问题帧,找到了解决问题的线索。文章详细介绍了解决方法,帮助读者顺利安装oracle 10g客户端。 ... [详细]
  • 从零基础到精通的前台学习路线
    随着互联网的发展,前台开发工程师成为市场上非常抢手的人才。本文介绍了从零基础到精通前台开发的学习路线,包括学习HTML、CSS、JavaScript等基础知识和常用工具的使用。通过循序渐进的学习,可以掌握前台开发的基本技能,并有能力找到一份月薪8000以上的工作。 ... [详细]
  • 本文介绍了Java后台Jsonp处理方法及其应用场景。首先解释了Jsonp是一个非官方的协议,它允许在服务器端通过Script tags返回至客户端,并通过javascript callback的形式实现跨域访问。然后介绍了JSON系统开发方法,它是一种面向数据结构的分析和设计方法,以活动为中心,将一连串的活动顺序组合成一个完整的工作进程。接着给出了一个客户端示例代码,使用了jQuery的ajax方法请求一个Jsonp数据。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 本文介绍了pack布局管理器在Perl/Tk中的使用方法及注意事项。通过调用pack()方法,可以控制部件在显示窗口中的位置和大小。同时,本文还提到了在使用pack布局管理器时,应注意将部件分组以便在水平和垂直方向上进行堆放。此外,还介绍了使用Frame部件或Toplevel部件来组织部件在窗口内的方法。最后,本文强调了在使用pack布局管理器时,应避免在中间切换到grid布局管理器,以免造成混乱。 ... [详细]
  • 本文介绍了在满足特定条件时如何在输入字段中使用默认值的方法和相应的代码。当输入字段填充100或更多的金额时,使用50作为默认值;当输入字段填充有-20或更多(负数)时,使用-10作为默认值。文章还提供了相关的JavaScript和Jquery代码,用于动态地根据条件使用默认值。 ... [详细]
author-avatar
Quiet静以修身
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有