• 关于 js 接收 json 的搜索结果

回答

JSON 是一种数据交换格式,基于文本,优于轻量,用于交换数据。 JSON 可以表示数字、布尔值、字符串、null、数组(值的有序序列),以及由这些值(或数组、对象)所组成的对象(字符串与 值的映射)。 JSON 使用 JavaScript 语法,但是 JSON 格式仅仅是一个文本。文本可以被任何编程语言读取及作为数据格式传递。 JSON 是一种基于文本的轻量级的数据交换格式。它可以被任何的编程语言读取和作为数据格式来传递。 在项目开发中,我们使用 JSON 作为前后端数据交换的方式。在前端我们通过将一个符合 JSON 格式的数据结构序列化为 JSON 字符串,然后将它传递到后端,后端通过 JSON 格式的字符串解析后生成对应的数据结构,以此来实现前后端数据的一个传递。 因为 JSON 的语法是基于 js 的,因此很容易将 JSON 和 js 中的对象弄混,但是我们应该注意的是 JSON 和 js 中的对象不是一回事,JSON 中对象格式更加严格,比如说在 JSON 中属性值不能为函数,不能出现 NaN 这样的属性值等,因此大多数的 js 对象是不符合 JSON 对象的格式的。 在 js 中提供了两个函数来实现 js 数据结构和 JSON 格式的转换处理,一个是 JSON.stringify 函数,通过传入一个符合 JSON 格式的数据结构,将其转换为一个 JSON 字符串。如果传入的数据结构不符合 JSON 格式,那么在序列化的时候会对这些值进行对应的特殊处理,使其符合规范。在前端向后端发送数据时,我们可以调用这个函数将数据对象转化为 JSON 格式的字符串。 另一个函数 JSON.parse() 函数,这个函数用来将 JSON 格式的字符串转换为一个 js 数据结构,如果传入的字符串不是标准的 JSON 格式的字符串的话,将会抛出错误。当我们从后端接收到 JSON 格式的字符串时,我们可以通过这个方法来将其解析为一个 js 数据结构,以此来进行数据的访问。

剑曼红尘 2020-04-03 15:30:04 0 浏览量 回答数 0

问题

jQuery easy UI datagraid里 JSON的问题 求大神们帮看!万分感谢

a123456678 2019-12-01 20:26:34 1158 浏览量 回答数 1

问题

jQuery easy UI datagraid里 JSON的问题 求大神们帮看!万分感谢

a123456678 2019-12-01 20:24:41 934 浏览量 回答数 1

新用户福利专场,云服务器ECS低至102元/年

新用户专场,1核2G 102元/年起,2核4G 699.8元/年起

回答

{user普通字段..., roles:[,,,,] }这种方式你可以先用JSON2.js给序列化成json串,然后controller接收@RequestParam(),然后用fastJson等开源工具再给反序列化就ok了

a123456678 2019-12-02 02:10:44 0 浏览量 回答数 0

回答

第一种情况 如果你是从后端A获取到json到前端,前端直接发送json字符串给后端,后端接收到json以后编译成对象或者数组(php 的两个json函数)再处理应该是相当的简单的。 第二种情况 如果你非要把后端A的JSON数据组装成键值对的话,那就用JS写一个算法,组装好以后以GET方式发送给服务器端。 思路:用 JavaScript JSON.parse() 方法将字符串转成 JavaScript 对象;操作这个对象,然后拼接组装成一个字符串,GET方式发送。代码: var jsonString = '[ { "ID": 0, "name": "张三"}, { "ID": 1, "name": "李四" } ]'; var jsonObject = JSON.parse(jsonString); var string = ""; for(var i=0; i<jsonObject.length; i++) { string += '&ID='+jsonObject[i].ID+"&name="+jsonObject[i].name; } string = string.substring(1); console.log(string); 你的json字符串似乎有点问题,“张三”和“李四”后面应该是没有逗号的。

小旋风柴进 2019-12-02 02:28:35 0 浏览量 回答数 0

回答

没有太看懂你的问题,数据是从后端获取的,然后又要发送给后端有点没太听明白。 第一种情况 如果你是从后端A获取到json到前端,前端直接发送json字符串给后端,后端接收到json以后编译成对象或者数组(php 的两个json函数)再处理应该是相当的简单的。 第二种情况 如果你非要把后端A的JSON数据组装成键值对的话,那就用JS写一个算法,组装好以后以GET方式发送给服务器端。 思路:用 JavaScript JSON.parse() 方法将字符串转成 JavaScript 对象;操作这个对象,然后拼接组装成一个字符串,GET方式发送。代码: var jsonString = '[ { "ID": 0, "name": "张三"}, { "ID": 1, "name": "李四" } ]'; var jsonObject = JSON.parse(jsonString); var string = ""; for(var i=0; i<jsonObject.length; i++) { string += '&ID='+jsonObject[i].ID+"&name="+jsonObject[i].name; } string = string.substring(1); console.log(string); 补充: 你的json字符串似乎有点问题,“张三”和“李四”后面应该是没有逗号的。

爵霸 2019-12-02 01:55:24 0 浏览量 回答数 0

问题

【javascript学习全家桶】934道javascript热门问题,阿里百位技术专家答疑解惑

管理贝贝 2019-12-01 20:07:22 6202 浏览量 回答数 1

回答

jQuery AJAX 请求的 datatype 你已经设为 JSON 了,回调中接收的参数已转化为 JS 对象,无需手动转换~[4](alert 只能显示字符串,把对象传进去会自动调用对象的 toString() 方法,自然显示 [object Object])######谢谢啊!已经修改好了!把JSONObject json这个json传过去就可以了,然后alert(data.flag);就可以了######如果这样改//弹出对话框的内容为:undefined success:function(data) { alert(data.info);//弹出对话框的内容为:undefined,,,怎么改才可以弹出 },###### 引用来自“南漂一卒”的评论 jQuery AJAX 请求的 datatype 你已经设为 JSON 了,回调中接收的参数已转化为 JS 对象,无需手动转换~[4](alert 只能显示字符串,把对象传进去会自动调用对象的 toString() 方法,自然显示 [object Object]) 如果这样改//弹出对话框的内容为:undefined success:function(data)         {            alert(data.info);//弹出对话框的内容为:undefined,,,怎么改才可以弹出内容              },###### 加上这么一句话: $.ajaxSetup({ dataType: 'json', contentType:'application/x-www-form-urlencoded;charset=UTF-8', cache:false }); ######alert(JSON.stringify(data))######已经是你要的格式了######直接反回map 去掉datetype

kun坤 2020-06-03 10:54:38 0 浏览量 回答数 0

回答

本节以 IDE 内的 Todo App 模板小程序为例,介绍支付宝小程序的文件结构, 以及每种文件类型在小程序中的作用。 Todo App 是一个简单的待办事项管理小程序,实现了用户登录、新增自定义待 办事项、划除或恢复待办事项的功能。 app.json app.json 是小程序的全局配置,用于配置小程序的页面列表、默认窗口标题、导 航栏背景色等。更多配置请参见 文档配置。 app.acss 定义了全局样式,作用于当前小程序的所有页面。 上例中的 page 为框架支持的特殊选择器,会匹配框架提供的页面根节点容器。 app.js app.js 用于注册小程序应用,可配置小程序的生命周期,声明全局数据,调用丰 富的 API,如以下获取用户授权及获取用户信息 API 等,更多 API 信息请参见 API 文档。 可以看到,全局的逻辑代码放在 App({})中,声明了全局数据 todos 、 userInfo ,以及全局方法 getUserInfo()。 todos 全局数据中已经存储了一些数据,即 Todo App 小程序中已有的一些待办 事项。 全局方法 getUserInfo() 调用了授权 API my.getAuthCode,以及获取用户信息 API my.getAuthUserInfo ,并将获取到的用户信息存储在 userInfo 中。 小程序页面 此示例中有两个页面,Todo List 页面和 Add Todo 页面,都位于 pages 目录 下。小程序的所有页面路径必须在 app.json 中申明,路径从项目根目录开始且 不能包括后缀名,pages 的第一个页面就是小程序的首页。 每一个页面 由同路径下的四种类型文件组成,即 .json 后缀的配置文件,.axml 后缀的模板文件,.acss 后缀的样式文件,.js 后缀的逻辑脚本文件。 todo List 页面 todos.json 用于配置当前页面的窗口表现。此处定义了使用一个自定义组件 add-button ,指定它的组件名称及对应的路径。自定义组件的具体使用后面会讲 述。 页面配置文件不是必须的。当存在页面配置文件时,各个页面配置项会优先于 app.json 中 window 的同名配置项。当不存在页面配置文件,则直接使用 app.json 中的默认配置。因此,Todo List 页面的标题为 app.json 中指定的 defaultTitle ,即 Todo App。 todos.axml 为页面结构模板文件。使用 ,, ,,, , 来搭建页面结构以及通过 Mustache 语法两对大括号({{}})绑定 todos 数据。  绑定数据请参见此文档  绑定事件请参见此文档 todos.js 是页面的逻辑脚本文件,小程序页面的逻辑代码必需包含在 Page({}) 中。在这个文件中可实现:  监听并处理页面的生命周期函数 onShow onLoad  获取小程序实例以及其他页面实例 getApp getCurrentPages  声明并处理数据 data  响应页面交互事件,调用 API 等  这里需要注意的是 app.todos 是来自 app.js 中全局的变量定义 todos.acss 定义页面局部样式。指定 todos.axml 中不同元素的样式,包括位 置、背景颜色、字体、字体颜色等。 ACSS 语法参见 样式 文档。页面的 .acss 文件不是必须的,但对于相同选择器,页面局部样式会覆盖 app.acss 全局样 式。 Add Todo 页面 add-todo.json 声明自定义组件名称和路径。 add-todo.axml 为页面结构模板文件。 此页面的两个核心功能为: 1. 使用 组件接收用户输入。 2. 是一个自定义组件,可将一些功能完整的代码封装为自定义组件,便于 在其他地方复用。 add-todo.js 为页面逻辑代码。add-todo.acss 同 todos.acss 用法一致,不再 赘述 内容来源:https://developer.aliyun.com/article/756818?spm=a2c6h.12873581.0.dArticle756818.26162b70Su1GZy&groupCode=tech_library

KaFei 2020-04-27 13:49:46 0 浏览量 回答数 0

问题

SpringMVC3.2 无法接收json参数

杨冬芳 2019-12-01 20:16:56 1065 浏览量 回答数 1

回答

没执行,说明代码有错误。路径没错吧?检查一下,还有报错了没,错误怎么提示的1,可能是路径问题,2,你的返回值,的问题,方法是把地址直接粘贴到地址栏中,看看是否可以访问,如果是返回值的错误,可以用服务器的语言测试是否 有js访问,例如:php java 都有自己的检测方法 回调默认接收json数据,而你返回text数据,指定dataType为text试一下,用ajax方法试过

杨冬芳 2019-12-02 03:03:19 0 浏览量 回答数 0

问题

java传递json,接收时异常CharConversionException

杨冬芳 2019-12-01 20:17:00 795 浏览量 回答数 1

回答

" HTML ajax端 <pre class=""brush:js; toolbar: true; auto-links: false;"">$.ajax({ url:'/login.php', data:{'name':name, 'pwd':pwd}, type:'POST', dataType:'json', success:function(data){ console.dir(data) if(data.status == '1') alert(data.mes) }else{ alert(data.mes) } } }) php端: <?php $sql = "SELECT * FROM user WHERE user = '{$_POST['name']}' AND pwd = '{$_POST['pwd']}'", //后面大概就是查数据,看看有没有结果。 if(){ echo json_encode(array('status' => '200', 'mes' => '登录成功')); }else{ echo json_encode(array('status' => '0', 'mes' => '帐号密码错误')); } 一个流程大概就这样了。楼主肯定有地方写错~~ ######回复 @首席撸破皮 : 谢谢,可以接受。我当时用的$.post()直接传递,在PHP接受不了post传过来的,但用$.get()就可以,用你的案例可以接受到,也就是说直接$.ajax可以接受。谢谢你的帮助。感谢######回复 @键盘浪人 : 呵呵 看错了######回复 @键盘浪人 : 上面的方法肯定可以接收的。如果接收不了,肯定是你写得有问题。这个方法我已经写了千百次。######回复 @zuiw : ... datatype是将回调的数据解析。PHP端直接用POST接收则可。这个方法和 $.getJson一样######jq是用的post方式提交的,但是提交的值是json格式的,获取的时候先要把json的转换成数组,直接$_POST['name'] 是不行的######在Firefox里打开按F12打开Firebug,看看点击登录时“网络”那里的情况不就知道了。 ###### 没代码说个XX,如果php连这都能出问题,真是白发展这么些年了 ###### 引用来自“首席撸破皮”的评论 HTML ajax端 $.ajax({ url:'/login.php', data:{'name':name, 'pwd':pwd}, type:'POST', dataType:'json', success:function(data){ console.dir(data) if(data.status == '1') alert(data.mes) }else{ alert(data.mes) } } }) php端: <?php $sql = "SELECT * FROM user WHERE user = '{$_POST['name']}' AND pwd = '{$_POST['pwd']}'", //后面大概就是查数据,看看有没有结果。 if(){ echo json_encode(array('status' => '200', 'mes' => '登录成功')); }else{ echo json_encode(array('status' => '0', 'mes' => '帐号密码错误')); } 学习了###### $.post('/login.php', {name: name, pwd: pwd}, function (ajax) { console.log(ajax); }, 'json'); PHP: var_dump($_POST); data:{name:name,pwd:pwd}, PHP: var_dump($_POST); or PHP: var_dump($_REQUEST); 必须确保网页服务器报告的MIME类型与我们选择的dataType所匹配。比如说,XML的话,服务器端就必须声明 text/xml 或者 application/xml 来获得一致的结果。 首先要确保你传过去的是json数据格式,然后在php端进行打印看看 echo json_encode($_POST);

一枚小鲜肉帅哥 2020-05-31 22:19:14 0 浏览量 回答数 0

回答

找eechen######难道不是POST和GET?######php不是后台语言?######不用php也行...######PHP并不是前端语言,而是后端的,和JSP是一个级别的。###### PHP 里请求java,得到数据? 擦··问哈你老板,php到底是前端还是后端·· ###### 哈哈,这个贴有意思,PHP和Java站到一起了~  同问eechen,他对淘宝的架构非常了解 ######他就是个百度的机器而已,了解淘宝个蛋蛋。######你用PHP来做用户交互接口是可以的,你与后端的Java服务器进行通信,使用JSON格式就好了。比如你在PHP端接收到了表单数据,那么你可以直接请求你的Java后端服务器进行业务操作。或者也可以先过PHP服务器一次,做一些基本数据处理或签名等操作。######回复 @qschenling : 你可以看看SpringMVC的东西。比如你PHP中一个猪类,有体重和性别,你在Java里面也建一个猪类,属性名称和数据类型和PHP保持一致,这样你发送过来的JSON,SpringMVC就能解析出来赋值给你Java里的猪类。######你的意思是如果有数据交互的话,就直接使用json传递? 如果数据量太大,又该如何处理呢? 比如从前端输入的数据想保存到数据库(比如猪的体重,猪的年龄等等这些),java如何拿到呢? 不需要使用网上说的那些soap,quercus,lajp这样的内容吗? 谢谢亲了!######php和java都是后端处理业务逻辑的语言呀,前端web的话肯定是html+css了,前端传递的数据一般就是post和get,php和java都有接收的方法。###### JAVA提供数据服务 PHP使用服务 跟访问远程资源类似 两边通过HTTP交互 JAVA端平时怎么处理请求现在也怎么处理 前后端的区分这里只是相对的 并不是说要用PHP干JS这类「前端脚本」干的活 其实是介于前端界面和后端数据服务中间的一个层

爱吃鱼的程序员 2020-06-04 16:20:33 0 浏览量 回答数 0

回答

如果你不加(),那么js编译器会认为{}是一个代码块,而不是一个对象块,然后由于一个代码块里包含了:,就会报错了。 你加了一个,js会默认识别这个为一个对象块,就变成一个json对象了。 如果你非得不想加这个() 你也可以尝试这样: var strTest = "var objTEST = {'a' : 'b'}"; eval(strTest); console.log(strTest); 这样也是可以执行的,但是灵活性就差很多了。所以还是推荐使用eval()中间加括号的方案 另外也可以看这个:http://www.json.org/js.html ###### eval函数接收一个参数s,如果s不是字符串,则直接返回s。否则执行s语句。如果s语句执行结果是一个值,则返回此值,否则返回undefined。 需要特别注意的是对象声明语法“{}”并不能返回一个值,需要用括号括起来才会返回值,简单示例如下: var code1='"a" + 2';    //表达式 var code2='{a:2}';      //语句 alert(eval(code1));     //->'a2' alert(eval(code2));     //->undefined alert(eval('(' + code2 + ')'));    //->[object Object]         可以看到,对于对象声明语句来说,仅仅是执行,并不能返回值。为了返回常用的“{}”这样的对象声明语句,必须用括号括住,以将其转换为表达式,才能返回其值。这也是使用JSON来进行Ajax开发的基本原理之一。在例子中可以清楚的看到,第二个alert语句输出的是undefined,而第三个加了括号后输出的是语句表示的对象。 ###### 引用来自“JustForFly”的答案 eval函数接收一个参数s,如果s不是字符串,则直接返回s。否则执行s语句。如果s语句执行结果是一个值,则返回此值,否则返回undefined。 需要特别注意的是对象声明语法“{}”并不能返回一个值,需要用括号括起来才会返回值,简单示例如下: var code1='"a" + 2';    //表达式 var code2='{a:2}';      //语句 alert(eval(code1));     //->'a2' alert(eval(code2));     //->undefined alert(eval('(' + code2 + ')'));    //->[object Object]         可以看到,对于对象声明语句来说,仅仅是执行,并不能返回值。为了返回常用的“{}”这样的对象声明语句,必须用括号括住,以将其转换为表达式,才能返回其值。这也是使用JSON来进行Ajax开发的基本原理之一。在例子中可以清楚的看到,第二个alert语句输出的是undefined,而第三个加了括号后输出的是语句表示的对象。 谢谢“JustForFly”我明白了  ######表示感谢

爱吃鱼的程序员 2020-06-03 20:50:55 0 浏览量 回答数 0

回答

概述 App() 代表顶层应用,管理所有页面和全局数据,以及提供生命周期回调等。它 也是一个构造方法,生成 App 实例。 一个小程序就是一个 App 实例。 每个小程序顶层一般包含三个文件。  app.json:应用配置  app.js:应用逻辑  app.acss:应用样式(可选) 简单示例 一个简单的 app.json 代码如下: "pages": [ "pages/index/index", "pages/logs/logs" ], "window": { "defaultTitle": "Demo" } } 这段代码配置指定小程序包含两个页面(index 和 logs),以及应用窗口的默认 标题设置为 “Demo”。 一个简单的 app.js 代码如下: onLaunch(options) { // 第一次打开 }, onShow(options) { // 小程序启动,或从后台被重新打开 }, onHide() { // 小程序从前台进入后台 }, onError(msg) { // 小程序发生脚本错误或 API 调用出现报错 console.log(msg); }, globalData: { // 全局数据 name: 'alipay', }, }); 26 app.json 全局配置 app.json 用于对小程序进行全局配置,设置页面文件的路径、窗口表现、多 tab 等。 以下是一个基本配置示例: "pages": [ "pages/index/index", "pages/logs/index" ], "window": { "defaultTitle": "Demo" } } 完整配置项如下: 属性 类型 是否必填 描述 pages Array 是 设置页面路径 window Object 否 设置默认页面的窗 口表现 tabBar Object 否 设置底部 tabbar 的表现 pages app.json 中的 pages 为数组属性,数组中每一项都是字符串,用于指定小程序 的页面。在小程序中新增或删除页面,都需要对 pages 数组进行修改。 pages 数组的每一项代表对应页面的路径信息,其中,第一项代表小程序的首 页。 页面路径不需要写任何后缀,框架会自动去加载同名的 .json、.js、.axml、.acss 文件。举例来说,如果开发目录为: │ ├──index │ │ ├── index.json │ │ ├── index.js │ │ ├── index.axml │ │ └── index.acss │ ├──logs │ │ ├── logs.json │ │ ├── logs.js │ │ └── logs.axml ├── app.json ├── app.js └── app.acss app.json 中应当如下配置: { "pages":[ "pages/index/index", "pages/logs/logs" ] } window window 用于设置小程序的状态栏、导航条、标题、窗口背景色等。 示例代码: { "window":{ "defaultTitle": "支付宝接口功能演示" } } 属性 类型 是否必 填 描述 最低版本 defaultTitle String 否 页面默认标题 - pullRefresh String 否 是否允许下拉刷新。默认 NO, 备注:下拉刷新生效的 前提是 allowsBounceVertical 值 为 YES allowsBounceV ertical String 否 是否允许向下拉拽。默认 YES, 支持 YES / NO 28 transparentTitl e String 否 导航栏透明设置。默认 none,支持 always 一直透 明 / auto 滑动自适应 / none 不透明 titlePenetrate String 否 是否允许导航栏点击穿透。 默认 NO,支持 YES / NO showTitleLoadi ng String 否 是否进入时显示导航栏的 loading。默认 NO,支持 YES / NO titleImage String 否 导航栏图片地址 - titleBarColor HexCol or 否 导航栏背景色,十六进制颜 色值(0-255) - backgroundCol or HexCol or 否 页面的背景色,十六进制颜 色值(0-255) - backgroundIm ageColor HexCol or 否 下拉露出显示的背景图底 色,十六进制颜色值(0- 255) - backgroundIm ageUrl String 否 下拉露出显示的背景图链接 - gestureBack String 否 iOS 用,是否支持手势返 回。默认 NO,支持 YES / NO enableScrollBa r Boolea n 否 Android 用,是否显示 WebView 滚动条。默认 YES,支持 YES / NO onReachBotto mDistance Number 否 页面上拉触底时触发时距离 页面底部的距离,单位为 px。相关文档页面事件处理 函数 1.19.0 ,目前 iOS 在 page.json 下设 置无效,只能全 局设置。 29 tabBar 如果你的小程序是一个多 tab 应用(客户端窗口的底部栏可以切换页面),那么 可以通过 tabBar 配置项指定 tab 栏的表现,以及 tab 切换时显示的对应页 面。 注意:  通过页面跳转(my.navigateTo)或者页面重定向(my.redirectTo)所到达的页面,即使 它是定义在 tabBar 配置中的页面,也不会显示底部的 tab 栏。  tabBar 的第一个页面必须是首页。 tabBar 配置项有以下: 属性 类型 是否必填 描述 textColor HexColor 否 文字颜色 selectedColor HexColor 否 选中文字颜色 backgroundColor HexColor 否 背景色 items Array 是 每个 tab 配置 每个 item 配置: 属性 类型 是否必填 描述 pagePath String 是 设置页面路径 name String 是 名称 icon String 否 平常图标路径 activeIcon String 否 高亮图标路径 icon 图标推荐大小为 60×60 px 大小,系统会对传入的非推荐尺寸的图片进行非 等比拉伸或缩放。 示例代码: "tabBar": { 30 "textColor": "#dddddd", "selectedColor": "#49a9ee", "backgroundColor": "#ffffff", "items": [ { "pagePath": "pages/index/index", "name": "首页" }, { "pagePath": "pages/logs/logs", "name": "日志" } ] } } app.acss 全局样式 app.acss 作为全局样式,作用于当前小程序的所有页面。 ACSS 是一套样式语言,用于描述 AXML 的组件样式,决定 AXML 的组件的显 示效果。 为适应广大前端开发者,ACSS 和 CSS 规则完全一致,100% 可以用。同时为更 适合开发小程序,对 CSS 进行了扩充。 ACSS 支持 px,rpx,vh,vw 等单位。 rpx rpx(responsive pixel)可以根据屏幕宽度进行自适应,规定屏幕宽为 750rpx。以 Apple iPhone6 为例,屏幕宽度为 375px,共有 750 个物理像 素,则 750rpx = 375px = 750 物理像素,1rpx = 0.5px = 1 物理像素。 设备 rpx 换算 px(屏幕宽度 / 750) px 换算 rpx(750 / 屏幕宽 度) iPhone5 1rpx = 0.42px 1px = 2.34rpx iPhone6 1rpx = 0.5px 1px = 2rpx iPhone6 Plus 1rpx = 0.552px 1px = 1.81rpx 样式导入 使用 @import 语句可以导入外联样式表,@import 后需要加上外联样式表相对 路径,用;表示结束。 示例代码: .sm-button { padding: 5px; } /** app.acss **/ @import "./button.acss"; .md-button { padding: 15px; } 导入路径支持从 node_modules 目录载入第三方模块,例如 page.acss: @import "./button.acss"; /相对路径/ 32 @import "/button.acss"; /项目绝对路径/ @import "third-party/page.acss"; /第三方 npm 包路径/ 内联样式 组件上支持使用 style、class 属性来控制样式。 style 属性 用于接收动态样式,样式在运行时会进行解析。行内样式不支持!important 优先 级规则。 class 属性 用于接收静态样式,属性值是样式规则中类选择器名(样式类名)的集合,样式类 名不需要带上.,多个类名间以空格分隔。请静态样式写进 class 中,避免将静态 样式写进 style 中,以免影响渲染速度。 选择器 同 CSS3 保持一致。 注意:  .a-, .am- 开头的类选择器为系统组件占用,不可使用。  不支持属性选择器。 全局样式与局部样式  app.acss 中的样式为全局样式,作用于每一个页面。  页面文件夹内的 .acss 文件中定义的样式为局部样式,只作用在对应的页面,并会覆盖 app.acss 中相同的选择器。 本地资源引用 ACSS 文件里的本地资源引用请使用绝对路径的方式,不支持相对路径引用。例 如: /* 支持 / background-image: url('/images/ant.png'); / 不支持 */ background-image: url('./images/ant.png'); 33 app.js 注册小程序 App(object: Object) App() 用于注册小程序,接受一个 Object 作为属性,用来配置小程序的生命周 期等。 App() 必须在 app.js 中调用,必须调用且只能调用一次。 object 属性说明 属性 类型 描述 触发时机 onLaunch Function 生命周期回调:监 听小程序初始化 当小程序初始化完 成时触发,全局只 触发一次 onShow Function 生命周期回调:监 听小程序显示 当小程序启动,或 从后台进入前台显 示时触发 onHide Function 生命周期回调:监 听小程序隐藏 当当前页面被隐藏 时触发,例如跳 转、按下设备 Home 键离开 onError Function 监听小程序错误 当小程序发生 js 错误时触发 onShareAppMessage Function 全局分享配置 - 前台/后台定义:  小程序用户点击右上角关闭,或者按下设备 Home 键离开支付宝时,小程序并不会直接销 毁,而是进入后台。  当用户再次进入支付宝或再次打开小程序时,小程序会从后台进入前台。  只有当小程序进入后台 5 分钟后,或占用系统资源过高,才会被真正销毁。 onLaunch(object: Object) 及 onShow(object: Object) object 属性说明: 属性 类型 描述 34 query Object 当前小程序的 query,从启动参数的 query 字段解析而来 scene number 启动小程序的 场景值 path string 当前小程序的页面地址,从启动参数 page 字段解析而来,page 忽略时默认为首页 referrerInfo Object 来源信息 比如,启动小程序的 schema url 如下: alipays://platformapi/startapp?appId=1999&query=number%3D1&page=x%2Fy%2 Fz  小程序首次启动时,onLaunch 方法可获取 query、path 属性值。  小程序在后台被用 schema 打开,也可从 onShow 方法中获取 query、path 属性值。 App({ onLaunch(options) { // 第一次打开 console.log(options.query); // {number:1} console.log(options.path); // x/y/z }, onShow(options) { // 从后台被 schema 重新打开 console.log(options.query); // {number:1} console.log(options.path); // x/y/z }, }); referrerInfo 子属性说明: 属性 类型 描述 最低版本 appId string 来源小程序 - sourceServiceId string 来源插件,当处于插件运行模式时可见 1.11.0 35 extraData Object 来源小程序传过来的数据。 - 注意:  不要在 onShow 中进行 redirectTo 或 navigateTo 等操作页面栈的行为。  不要在 onLaunch 里调用 getCurrentPages(),因为此时 page 还未生成。 onHide() 小程序从前台进入后台时触发 onHide() 。 示例代码: App({ onHide() { // 进入后台时 console.log('app hide'); }, }); onError(error: String) 小程序发生脚本错误时触发。 示例代码: App({ onError(error) { // 小程序执行出错时 console.log(error); }, }); onShareAppMessage(object: Object) 全局分享配置。当页面未设置 page.onShareAppMessage 时,调用分享会执行 全局的分享设置,具体见 分享 。 globalData 全局数据 App() 中可以设置全局数据 globalData。 示例代码: // app.js App({ globalData: 1 }); getApp 方法 小程序提供了全局的 getApp() 方法,可获取当前小程序实例,一般用于在子页 面中获取顶层应用。 var app = getApp(); console.log(app.globalData); // 获取 globalData 使用过程中,请注意以下几点:  App() 函数中不可以调用 getApp(),可使用 this 可以获取当前小程序实例。  通过 getApp() 获取实例后,请勿私自调用生命周期回调函数。  请区分全局变量及页面局部变量,比如: // app.js App({ //定义全局变量 globalData,在整个 App 中有效 globalData: 1 }); // a.js // 定义页面局部变量 localValue,只在 a.js 有效 var localValue = 'a'; // 获取 app 实例 var app = getApp(); // 拿到全局数据,并改变它 app.globalData++; // b.js // 定义页面局部变量 localValue,只在 b.js 有效 var localValue = 'b'; // 如果 a.js 先运行,globalData 会返回 2 console.log(getApp().globalData); a.js 和 b.js 两个文件中都声明了变量 localValue,但并不会互相影响,因为各 个文件声明的局部变量和函数只在当前文件下有效。 内容来源:https://developer.aliyun.com/article/756818?spm=a2c6h.12873581.0.dArticle756818.26162b70Su1GZy&groupCode=tech_library

KaFei 2020-04-27 13:54:36 0 浏览量 回答数 0

问题

关于controller接收json串的问题

杨冬芳 2019-12-01 20:17:20 1340 浏览量 回答数 1

回答

用chrome和developerconsole看一下ajax请求的request、response,FF的firebug也可以。 看到了几个问题: 0.在submit中我都是event.preventDefault(),不知道returnfasle是不是一样。1.多个类似的问题(下面还有一个confirm,那个测试用的“aaaaa”也可以删了) varuser=$("#user").val();varpassword=$("#password").val();if(user==""){$("#confirm").text("请输入登录用户名");$("user").focus();//->$('#user').focus();2.你在ajax中用POST方式,但是在服务器用的是GET方式 3. dataType:"json"应该不是json(可以不要这行),你服务器 读取的方式是form的形式4.在js和PHP中可以直接if(str)来判断str是不是为空回复 @南漂一卒:非常感谢你的讲解!=)jQuery事件回调中可以用returnfalse;一次性禁用默认功能、阻止冒泡传播,但不推荐这种做法了~用多了框架,看原生php突然各种不适应PS:小心SQL注入 php或者mysql都是utf8了吗?php有没有bom值(如果有,要去除)。  要注意jQuery操作json是需要utf8的。把msg=="successful"改成msg.result=="successful" a似乎没有type属性,没有激活表单的submit事件,试着加入inputtype="submit"或者通过事件绑定执行提交。 引用来自“Micooz”的评论a似乎没有type属性,没有激活表单的submit事件,试着加入inputtype="submit"或者通过事件绑定执行提交。直接在后台程序打印出传入的值。。。如果有值则说明后台程序没有问题。。。。 用post提交,用GET怎么可能会接收到?

爱吃鱼的程序员 2020-06-14 15:14:36 0 浏览量 回答数 0

回答

如何实现 JavaScript RPC 应用 一、一个 JavaScript RPC 的实现 1、RPC工作流程 JavaScript RPC 的简单实现过程是: 在客户端JavaScript脚本中,将要调用的服务端PHP函数名和函数参数(本地的JavaScript变量值)作为要传输的数据,通过Ajax传输到服务端,同时,Ajax设置一个回调函数,以便使用服务端函数的返回结果。在服务端PHP脚本中,接收Ajax传输的数据,从中取出要执行的函数名和函数参数。然后执行指定的函数,并将执行函数的返回值作为传输的数据,直接输出到浏览器,以此作为响应AJax的请求。客户端的Ajax在接受服务端的响应后,把返回的数据传递给AJax的回调函数。到此完成了一个RPC的流程。 2、传输的数据 在RPC执行过程中,客户端与服务端需要相互传输数据,我们分别称之为客户端数据和服务端数据。对此的说明如下表: 客户端数据: 函数名:服务端PHP脚本中存在的函数。 函数参数:客户端JavaScript脚本中的变量值。 服务端数据: 函数返回值:执行服务端PHP函数的返回值。 3、序列化与反序列化 为了要传输客户端的变量值和服务端的函数返回值,需要对其进行序列化处理。与之相对应的在传输后还要进行反序列化处理。 JavaScript中的变量的类型:基本类型和JSON类型(普通数组、元对象) PHP中的变量类型:基本类型和数组(普通数组和关联索引数组) PHP语言具有序列化和反序列化函数,而JavaScript语言中没有,因此我们要自己实现它。 由于我们进行JavaScript和PHP之间的数据交换,所以直接把JavaScript变量序列化为PHP的序列化形式。我们实现Js2PhpSerialize函数来完成这个任务。 Js2PhpSerialize:主要是把JSON对象及嵌套调用的JSON对象和基本类型的数据表示为PHP的序列化形式。 服务端的PHP在执行函数后,把结果序列化为JavaScript能理解的形式,以便于eval动态生成变量。我们实现php2JsSerialize函数来完成这个任务。 4、功能实现 我们创建两个类来完成上述功能。一个是客户端的JavaScript类,一个是服务端的PHP类。 文件名:jsrpc.class.js 要实现的功能: A、序列化JavaScript的数据。 B、Ajax传输序列化数据 C、反序列化JavaScript数据。 D、设置回调函数。 文件名:jsrpc.class.php 要实现的功能: A、响应Ajax请求,接收序列化数据。 B、反序列化PHP数据,基本类型和数组。 C、序列化PHP数据为JavaScript数据。 将JavaScript的数据类型转换为PHP可以理解的形式,通过Ajax把转换后的数据传递到服务端,由PHP的eval函数解析为PHP的数据类型。 PHP函数执行后,将执行结果数据转换为JavaScript可以理解的形式,由Ajax的回调函数响应,并由JavaScript的eval函数解析为JavaScript的数据类型。 二、应用示例 代码片段: JavaScript端: <SCRIPT language=javascript src="jsrpc.class.js"></SCRIPT> <SCRIPT language=javascript> var arr = new Array(1,'abc', new Array(3,'xyz'),5); var rpc = new JsRPC(); rpc.call('ajax_server.php', 'checkBook', response, arr); function response(result) { alert(result[1]); } </SCRIPT> PHP端(即文件ajax_server.php): <?php require_once('jsrpc.class.php'); $ar = new JsRPC(); $ar->register('checkBook'); $ar->start(); function checkBook($param) { return $param; } ?> 如上所示,它使用方法与一个叫CPaint的类库相似,只是省去了将数据装到一个对象中的步骤。 三、获取源码 “答案来源于网络,供您参考”

牧明 2019-12-02 02:15:31 0 浏览量 回答数 0

回答

可能是服务器出错了,抛异常了,客户端解析异常信息的时候出错。######确实是后台代码的错误,struts返回结果的jsp不存在了,但是当时后台也没有异常信息这是最郁闷的。######,,######,######最后一个</a>只有结束标签,没有开始标签,放到编译器里直接就报错了。######这个一般是出了什么错误,教你一招怎么调试 从0开始,备份一个页面,把这个页面清空,然后从备份页面里把代码一点一点加到这个页面 每加一点,运行一下,看看有没有错误,这样能定位到哪里出错了 ######这样调不会累死吗######你的 contentType是text/html,你ajax调用完是按什么类型来解析的?######一楼正解,这种JS报错的问题很常见啊。一般都是由于服务器端抛异常了,导致的 ###### 引用来自“alu129336”的评论一楼正解,这种JS报错的问题很常见啊。一般都是由于服务器端抛异常了,导致的 由于服务器端抛出异常后是一个错误页面,而你前端还是用JSON去接收数据的返回,导致JS的报错。 去看服务器端的异常信息吧。 ######确实你说的没错,问题已经解决了######问题已经解决了,谢谢大家!

kun坤 2020-06-06 13:50:34 0 浏览量 回答数 0

问题

spring-webflux使用问题,有大神知道么??报错

爱吃鱼的程序员 2020-06-05 15:47:59 0 浏览量 回答数 1

回答

对方的问题,他们不按照文档写代码还有理了?回复<aclass="referer"target="_blank">@NO17:哈哈哈,然后第二天另外一个第三方打电话给CEO说你们怎么不支持null字符串做参数,看楼主怎么办回复<aclass="referer"target="_blank">@leo108:java接口返回null很正常,不像js可以自动将null视为空,php接收后就变成“null”了,那就自己写一个empty方法得了。再说你让别人改接口,既然别人直接通知CEO了,说明是很强势的第三方,别人会给你改么。<aclass="referer"target="_blank">@NO17报复心这么强?我踩你是因为你的方法完全就是误人子弟,如果楼主的业务允许"null"这个字符串作为参数,岂不是懵逼。那么你踩我的理由呢?我们老大说我的时候我觉得挺委屈的,但是想一下也还好,我们是服务商,没有办法。不会啊。我测试了没发现null和Null在php中有问题啊。你们交互不是用的json?你可以拿你们的接口测试下。是json的数据。这没法避免,按数据通信规则来讲,这就是自定义数据通信协议,协议双方必须严格遵守,这跟哪方用php哪方用java无关。对接方没看懂有点失误是正常的,稍微解释一下就行了。一般第三方通信接口都有技术支持,你认为你的api文档清晰明了,他们有可能觉得是一团糟,相互理解一下,都是苦逼技术活,何必相互为难呢嗯,确实跟语言无关。无论哪种语言,都NUll和空是两种不同的对象。 json中value有null是没问题的, json标准中key类型是string,value类型有: stringnumberobjectarraytruefalsenull 嗯,这个我知道你的程序不严谨,你还怪别人调用方 你看到我那句话怪别人了,我是在寻求避免方法好吧那就自己实现一个empty方法,把“null”也当成空。回复<aclass="referer"target="_blank">@leo108:谢谢,就事论事,这算一个方法。如果真的允许“null”作为参数,真的懵逼了。回复<aclass="referer"target="_blank">@nidongwo-:千万别用这个方法,看我那层的评论这个是好个好办法

爱吃鱼的程序员 2020-06-08 20:02:16 0 浏览量 回答数 0

问题

Jquery-datatables插件接收的json数据格式应该是怎样?报错 

kun坤 2020-06-03 10:18:32 5 浏览量 回答数 1

回答

用chrome和developer console看一下ajax请求的request、response,FF的firebug也可以。 ###### 看到了几个问题: 0. 在submit中我都是event.preventDefault(),不知道return fasle是不是一样。 1. 多个类似的问题(下面还有一个confirm,那个测试用的“aaaaa”也可以删了) var user = $("#user").val(); var password = $("#password").val(); if (user == ""){ $("#confirm").text("请输入登录用户名"); $("user").focus(); // -> $('#user').focus(); 2. 你在ajax中用POST方式,但是在服务器用的是GET方式 3. dataType:"json" 应该不是json(可以不要这行),你服务器 读取的方式是form的形式 4. 在js和PHP中可以直接if(str)来判断str是不是为空 ######回复 @南漂一卒 : 非常感谢你的讲解! =)######jQuery 事件回调中可以用 return false; 一次性 禁用默认功能、阻止冒泡传播,但不推荐这种做法了~######用多了框架,看原生php突然各种不适应######PS: 小心SQL注入###### php或者mysql都是utf8了吗?php有没有bom值(如果有,要去除)。  要注意jQuery操作json是需要utf8的。 ######把msg =="successful" 改成 msg.result =="successful" ######a似乎没有type属性,没有激活表单的submit事件,试着加入input type="submit" 或者 通过事件绑定执行提交。###### 引用来自“Micooz”的评论a似乎没有type属性,没有激活表单的submit事件,试着加入input type="submit" 或者 通过事件绑定执行提交。 +1######直接在后台程序打印出传入的值。。。如果有值则说明后台程序没有问题。。。。 ######用post提交,用GET怎么可能会接收到?

kun坤 2020-05-27 11:51:08 0 浏览量 回答数 0

回答

用chrome和developer console看一下ajax请求的request、response,FF的firebug也可以。 ###### 看到了几个问题: 0. 在submit中我都是event.preventDefault(),不知道return fasle是不是一样。 1. 多个类似的问题(下面还有一个confirm,那个测试用的“aaaaa”也可以删了) var user = $("#user").val(); var password = $("#password").val(); if (user == ""){ $("#confirm").text("请输入登录用户名"); $("user").focus(); // -> $('#user').focus(); 2. 你在ajax中用POST方式,但是在服务器用的是GET方式 3. dataType:"json" 应该不是json(可以不要这行),你服务器 读取的方式是form的形式 4. 在js和PHP中可以直接if(str)来判断str是不是为空 ######回复 @南漂一卒 : 非常感谢你的讲解! =)######jQuery 事件回调中可以用 return false; 一次性 禁用默认功能、阻止冒泡传播,但不推荐这种做法了~######用多了框架,看原生php突然各种不适应######PS: 小心SQL注入###### php或者mysql都是utf8了吗?php有没有bom值(如果有,要去除)。  要注意jQuery操作json是需要utf8的。 ######把msg =="successful" 改成 msg.result =="successful" ######a似乎没有type属性,没有激活表单的submit事件,试着加入input type="submit" 或者 通过事件绑定执行提交。###### 引用来自“Micooz”的评论a似乎没有type属性,没有激活表单的submit事件,试着加入input type="submit" 或者 通过事件绑定执行提交。 +1######直接在后台程序打印出传入的值。。。如果有值则说明后台程序没有问题。。。。 ######用post提交,用GET怎么可能会接收到?

kun坤 2020-06-06 18:15:11 0 浏览量 回答数 0

回答

跨域,你在你form表单提交的的controller处理(具体看你怎么样的代码),而不是在前端做处理,前端你就看成普通提交回复 @wanghahah:谢谢点拨!问题解决了,用的4.5版本httpclient回复 @高momo:403无非就是你请求类型不对,也有可能是直接binary形式,具体的你看下接口文档、或者你也可以贴出部分文档给我们看回复 @wanghahah:后台我也试了通过httpclient发post请求,并且带有文件,请求头Content-type设成multipart/form-data就报403,换成其他格式的那边又识别不了。。找不到解决办法还有我看楼下的评论,醉了,ajax可以同时传文件和表单js肯定是不行的,浏览器行为,你第三方接口因为服务端不会给你配置cors(例如:springaddCorsMappings添加允许跨域的url)、from直接提交表单不存在跨域问题(不通过js),但是存在接收响应xml/json这些(很少有人这么写);现在建议你只有通过后台代码请求接口 好像是用一个叫做jsonp的东西 可以实现跨域但是我要传文件。。ajax好像不能同时传form中的数据和文件 兄弟,跨域提交就是个伪命题,会有各种安全问题的,你还是直接从你这边的后端绕绕合适Js获取数据基本都有跨域问题,百度一下,很多相关文章的 别玩这个 这个和网银提交交易以后跳回一个道理,几个方案: 1、提交成功以后通过重定向url的方式(提交给对方的url后面跟一个gourl参数,即:对方收到你的表单请求并处理完成以后,将会让浏览器重定向到你传给他的gourl,然后会带上参数告诉你gourl对应的后台程序处理是否成功,后台通过输出js/配合iframe就可以实现前段的js回调了) 2、改为使用swfupload,网上有跨域方案 3、文件等数据往自己的网站提交,然后自己的网站后台将请求转发到对方网站(这样前台就不跨域了)第一个方法是试了下貌似即使返回值为js代码,跳转到我本地的代理文件或者页面,然后在这个代理页面操作父页面还是有跨域问题。要不就只能form提交到自身页面然后就刷新父页面 跨域请求使用过jsonp格式的,注意ajax的属性与普通的ajax稍有不同,后台接受的时候要设请求头,用于识别跨域请求和获取参数。 谢谢大家的分享!问题解决了,走的后台用的4.5版本httpclient

爱吃鱼的程序员 2020-06-07 22:34:04 0 浏览量 回答数 0

回答

" 用chrome和developer console看一下ajax请求的request、response,FF的firebug也可以。 ###### 看到了几个问题: 0. 在submit中我都是event.preventDefault(),不知道return fasle是不是一样。 1. 多个类似的问题(下面还有一个confirm,那个测试用的“aaaaa”也可以删了) var user = $("#user").val(); var password = $("#password").val(); if (user == ""){ $("#confirm").text("请输入登录用户名"); $("user").focus(); // -> $('#user').focus(); 2. 你在ajax中用POST方式,但是在服务器用的是GET方式 3. dataType:"json" 应该不是json(可以不要这行),你服务器 读取的方式是form的形式 4. 在js和PHP中可以直接if(str)来判断str是不是为空 ######回复 @南漂一卒 : 非常感谢你的讲解! =)######jQuery 事件回调中可以用 return false; 一次性 禁用默认功能、阻止冒泡传播,但不推荐这种做法了~######用多了框架,看原生php突然各种不适应######PS: 小心SQL注入###### php或者mysql都是utf8了吗?php有没有bom值(如果有,要去除)。  要注意jQuery操作json是需要utf8的。 ######把msg =="successful" 改成 msg.result =="successful" ######a似乎没有type属性,没有激活表单的submit事件,试着加入input type="submit" 或者 通过事件绑定执行提交。###### 引用来自“Micooz”的评论a似乎没有type属性,没有激活表单的submit事件,试着加入input type="submit" 或者 通过事件绑定执行提交。 +1######直接在后台程序打印出传入的值。。。如果有值则说明后台程序没有问题。。。。 ######用post提交,用GET怎么可能会接收到?" ![image.png](https://ucc.alicdn.com/pic/developer-ecology/129a5c24ba2342df9034c9a9c9cb2af0.png)

montos 2020-05-30 11:27:53 0 浏览量 回答数 0

问题

利用内存多叉树实现Ext JS中的无限级树形菜单(一种构建多级有序树形结构JSO?400报错

爱吃鱼的程序员 2020-05-31 00:31:27 0 浏览量 回答数 1

回答

云端接入域名和端口号是什么? 域名:js ${YourProductKey}.iot-as-mqtt.${YourRegionId}.aliyuncs.com 。 其中,${YourProductKey}请替换为您的产品ProductKey;${YourRegionId}请参见地域和可用区,替换为您在物联网平台创建产品时选择的地域代码。 端口: 1883。 使用MQTT协议连接,不同的设备可以使用相同的clientID连接服务器吗? clientID需为全局唯一。如果不同的设备使用相同的clientID同时连接物联网平台,那么先连接的那个设备会被强制断开。 如何开启域名直连? MQTT连接有两种方式。 认证后再连接:首先使用HTTPS连接到```js js iot-auth.cn-shanghai.aliyuncs.com:443 获取认证cert后,再使用MQTT连接到 ```js js/public.iot-as-mqtt.cn-shanghai.aliyuncs.com/1883。 认证连接必须使用TLS加密进行认证。 域名直连:连接域名:js ${productKey}.iot-as-mqtt.cn-shanghai.aliyuncs.com:1883 。 域名直连减少了HTTPS获取证书cert的过程。 资源受限的设备推荐使用域名直连。一些特殊增值服务,例如设备级别的引流,则推荐先HTTPS发送授权后再连接MQTT。在make.setting中设置js FEATURE_MQTT_DIRECT=y , 然后执行js make reconfig 即 可设置为先认证后再MQTT连接。 MQTT协议版本是多少? 在MQTT connect packet中设置MQTT的版本。目前SDK(V2.02)使用MQTT 3.1.1 。 可以修改SDK代码中js src\mqtt\mqtt_client.h IOTX_MC_MQTT_VERSION 的 值,来修改支持的版本。3:3.1版;4:3.1.1版。 MQTT进行设备认证时,server返回“400”错误 认证返回400错误,表示鉴权认证失败。请检查设备证书信息ProductKey、DeviceName和DeviceSecret是否正确。 C语言SDK中MQTT是否支持iOS接入? C语言SDK可以移植到任何能够支持C语言的系统上。如果是iOS系统建议寻找开源的Object-C实现。 目前mqtt-example设备上线后会立刻下线,请问如何修改mqtt-example让设备一直处于上线状态? mqtt-example程序发送一次消息后会自动退出,可以尝试以下任意一种方式实现长期在线。 执行mqtt-example时,使用命令行js ./mqtt-example loop , 设备会保持长期在线。修改demo代码。example 的代码在最后会调用IOT_MQTT_Destroy,设备最后会变成离线状态,所以可以修改代码,去掉IOT_MQTT_Unregister 和IOT_MQTT_Destroy。 while(1) { IOT_MQTT_Yield(pclient, 200); HAL_SleepMs(100); } 心跳的时间间隔如何设置? 在IOT_MQTT_Construct里面可以设置keepalive_interval_ms的取值。物联网平台使用这个值来作为心跳间隔时间。keepalive_interval_ms的取值范围是60000~300000。 设备端的重连机制是什么? 设备端会在keepalive_interval_ms时间间隔发送ping request,然后等待ping response。 如果设备端在keepalive_interval_ms时间内无法收到ping response,或是在进行send以及recv时发生错误,平台就认为此时网络断开,而需要进行重连。 重连机制是平台内部触发,无需使用者接入。重连时,会重新进行认证。如果认证成功就会开始再次进行MQTT connect。重连会一直持续直到再次连接成功。 云端如何侦测到设备离线? 云端会根据MQTT CONNECT packet里面keepalive的设置,等待ping request。如果在指定时间内没有收到ping request,则认为设备离线。 云端可以接受的最大时延是5秒。 设备端SDK是否支持MQTT和CCP协议的断线重连? 支持。测试场景描述:开发板通过WiFi连接上路由器后,把网线拔掉,MQTT和CCP协议都会自动尝试和server重新建立连接。尝试时间间隔是1s、2s、4s、8s、…,最大间隔时间默认是60s,也就是说断网后超过60s时间仍未连接成功,之后会每隔60s尝试和server重连。您可以设置最大间隔时间。 发布(Publish QoS1)数据时,偶尔会出现MQTT_PUSH_TO_LIST_ERROR(-42),如何解决? 需要等待ACK的packet都会存放起来,等待ACK。存放量有上限,当需要等待的packet太多到达上限时,就会触发js MQTT_PUSH_TO_LIST_ERROR(-42) error 。 出现错误可能是因为当前网络状态不好,或者是发送的频率过高。如果排除上述两个问题,当前的发送的频率是预期的,那么可以适当的调整IOTX_MC_REPUB_NUM_MAX、 IOTX_MC_SUB_REQUEST_NUM_MAX和IOTX_MC_SUB_NUM_MAX的大小。 如果业务允许,也可以把publish的QoS调整成0。 IOT_MQTT_Yield的作用是什么? IOT_MQTT_Yield的作用是尝试接收数据。因此在需要接收数据时,例如subscribe 和 unsubscribe之后,publish QoS1 消息之后,或是希望收到publish 数据时,都需要主动调用该函数。 IOT_MQTT_Yield参数timeout的意义是什么? IOT_MQTT_Yield会尝试接收数据,直到timeout时间到后才会退出。 IOT_MQTT_Yield与HAL_SleepMs的区别 IOT_MQTT_Yield与HAL_SleepMs都是阻塞一段时间,但是IOT_MQTT_Yield实质是去读取数据,而HAL_SleepMs则是系统什么也不做,等待timeout。 如何循环接收消息? 需要循环调用IOT_MQTT_Yield ,函数内自动维持心跳和接收数据。 订阅了多个Topic,调用一次IOT_MQTT_Yield,能接收到多个Topic的消息吗? 首先需要确定Topic的权限,是不是同时满足发布和订阅。如果是,调用一次IOT_MQTT_Yield,可以接收到多个packet。 MQTT连接方式,只能通过不停地调用IOT_MQTT_Yield来轮询获取数据吗? 如果使用的TCPIP协议栈,可以实现TCP主动通知上层有数据到达,可以改动实现事件触发的方式来触发IOT_MQTT_Yield。但是改动比较大,所以还请自行评估是否需要修改。 修改流程是: 调整utils_net.c里面socket的API,变成可以由TCP数据到达时回调的API。 当TCP主动通知上层有数据到达时,通知到MQTT服务器。让MQTT服务器内部执行IOT_MQTT_Yield,这样就可以不需要外部调用IOT_MQTT_Yield来读取数据。 如果TCP无法做到主动上报数据,但OS支持多线程,也可以在MQTT-example里面再起一个thread,在这个thread里面以下代码用于接收数据。收到数据时,触发主线程进行数据处理,而主线程大部分时间可以用于处理其他逻辑。 while(1) { IOT_MQTT_Yiled(pclient, 200); HAL_SleepMs(200); } 如果使用的系统也不支持多线程,就只能把IOT_MQTT_Yield的timeout时间间隔减小,然后提高调用的频率,在每次调用的时间间隔内执行其他操作,从而做到尽量减少对其他操作的阻塞。 是否支持QoS 2? 不支持。 什么情况下会发生订阅超时(subscribe timeout)? 在2倍request_timeout_ms时间内,系统未接收到SUBACK packet时,会触发订阅超时,并通过event_handle函数发送超时通知。 请在subscribe之后,立刻执行IOT_MQTT_Yield尝试读取SUBACK,请勿使用HAL_SleepMs。 subcribe时,返回IOTX_MQTT_EVENT_SUBCRIBE_NACK 请检查Topic的操作权限是否为订阅。 如果发布报错“no authorization”,请确认是否为发布权限。 MQTT 发布的消息体大小限制 MQTT的协议包受限于IOT_MQTT_Construct里参数的write_buf和read_buf的大小。 MQTT协议包大小不能超过256 KB。超过大小限制的消息会被丢弃。 MQTT协议pub消息payload格式是怎么样的? 物联网平台没有制定pub消息payload的具体字段有那些。您根据应用场景制定自己的协议,然后以JSON格式放到pub消息载体里面传给服务端。 ota_mqtt升级的时候报错“mqtt read buffer is too short” MQTT设置的buffer过小,即mqtt_param的pread_buf和pwrite_buf申请过小造成的。可以根据实际需要修改OTA_MQTT_MSGLEN的大小。 是否可以使用MQTT直连的方式进行OTA升级? OTA升级时,必须使用HTTPS进行固件下载。MQTT只接收版本更新指令,与MQTT的连接方式无关。阿里云不支持HTTP下载固件,因此如果设备没有SSL通信的能力,则不能使用OTA服务。 打开MQTT over TLS,运行时提示MQTT创建失败,返回错误码0x2700 如果关闭MQTT over TLS则可以成功地订阅和发布信息;打开MQTT over TLS时,建连失败。首先确认mbedtls是否做了修改,这是用于传输层和应用层之间加密的功能,不能随意更改。mbedtls没有修改,则考虑系统时间是否正确,系统时间不对也会导致证书校验失败。 进行mqtt连接的时候,是否需要root.crt证书验证? 若使用TLS进行MQTT接入,需要下载根证书。 若使用物联网平台提供的demo进行开发,无需再下载根证书,demo中已自带证书。 物联网平台支持哪些QoS Level? 在MQTT协议和CCP协议下,阿里云物联网平台支持的QoS Level都包括0和1。

剑曼红尘 2020-03-05 12:51:20 0 浏览量 回答数 0

回答

给你个例子。后台Java代码: @RequestMapping(value = "/friendLinks/friendLinksList.do") public void getfriendLinksList(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap){ response.setCharacterEncoding("UTF-8"); String pageNoStr = request.getParameter("pageNo"); Integer pageNo = 0; try { pageNo = Integer.valueOf(pageNoStr); } catch (Exception e) { pageNo = 0; } Page page = new Page(); page.setPageNo(pageNo); //按分页条件查询用户 List<FriendLinks> linksList = null; try { linksList = friendLinksService.getFriendLinksList(page); //将查出来的友情链接和分页信息放到json字符串中 JSONArray jsonList = new JSONArray(); JSONObject bj = JSONObject.fromObject(page); jsonList.add(bj); for (FriendLinks links : linksList) { JSONObject obj = JSONObject.fromObject(links); jsonList.add(obj); } response.getWriter().println(jsonList.toString()); response.getWriter().flush(); response.getWriter().close(); } catch (Exception e) { e.printStackTrace(); } return ; } JS中代码: function fillData(pageNo) { if (pageNo == "") { pageNo = thisPageNo; } var stateValue = $("#stateValue").val(); var titleValue = $("#titleValue").val(); $.ajax({ url:contextPath + "/friendLinks/friendLinksList.do", type:"POST", data:{ pageNo:pageNo, stateValue:stateValue, titleValue:titleValue }, dataType:"json", beforeSend:function () { $("#pageTd a").remove(); }, success:function (data) { var page = data[0]; if (page.count == 0) { var noDataMsg = "<tr><td colspan=\"9\" class=\"xiamian\">无相关数据</td></tr>"; $("#dataBody").html(noDataMsg); var pageMsg = "总记录数:<strong>0</strong>"+ "&nbsp;&nbsp;当前页:<strong>0/0</strong>&nbsp;&nbsp;"+ "<a href='javascript:;'>首页</a>&nbsp;"+ "<a href='javascript:;'>上一页</a>&nbsp;"+ "<a href='javascript:;'>下一页</a>&nbsp;"+ "<a href='javascript:;'>尾页</a>&nbsp;"; $("#pageButtonBefore").html(pageMsg); } else { var dataMsg = ""; var caozuo = ""; var useOrNot = ""; for (var i = 1; i < data.length; i++) { caozuo = ""; caozuo = caozuo + "<a href='javascript:;' onclick='checkJump(\""+data[i].id+"\")'>查看</a>"; caozuo = caozuo + "<a href='javascript:;' onclick='editJump(\""+data[i].id+"\")'>修改</a>"; caozuo = caozuo + "<a href='javascript:;' onclick='deleteJump(\""+data[i].id+"\")'>删除</a>"; if(data[i].status == "0"){ status = "是"; }else{ status = "否"; } dataMsg = dataMsg + "<tr><td>" + i + "</td><td>" + data[i].linkName + "</td><td>" + data[i].linkSite + "</td><td>" + status + "</td><td>"; dataMsg = dataMsg + caozuo; dataMsg = dataMsg + "</td></tr>"; } $("#dataBody").html(dataMsg); var pageMsg = "总记录数:<strong>"+page.count+"</strong>&nbsp;&nbsp;当前页:<strong>"+page.pageNo+"/"+page.totalPage+"</strong>&nbsp;&nbsp;"+ "<a href='javascript:fillData(\"1\");'>首页</a>&nbsp;&nbsp;"+ "<a href=javascript:fillData(\"" + page.pre + "\");>上一页</a>&nbsp;&nbsp;"+ "<a href=javascript:fillData(\"" + page.next + "\");>下一页</a>&nbsp;&nbsp;"+ "<a href=javascript:fillData(\"" + page.totalPage + "\");>尾页</a>&nbsp;&nbsp;"; $("#pageButtonBefore").html(pageMsg); } }, error:function () { alert("获取相关数据失败!"); }}); } 其实能看出来,JS怎么接收值跟后台用什么方式传没有多大关系,关键是看传过来的值格式是啥就好了。传回来的是字符串,那就直接按照字符串处理,传回来的是Json格式的那就直接按照解析Json来处理。

蛮大人123 2019-12-02 02:18:10 0 浏览量 回答数 0
阿里云大学 云服务器ECS com域名 网站域名whois查询 开发者平台 小程序定制 小程序开发 国内短信套餐包 开发者技术与产品 云数据库 图像识别 开发者问答 阿里云建站 阿里云备案 云市场 万网 阿里云帮助文档 免费套餐 开发者工具 SSL证书 小程序开发制作 视频内容分析 企业网站制作 视频集锦 代理记账服务 2020阿里巴巴研发效能峰会 企业建站模板 云效成长地图 高端建站 2020中国云原生 阿里云云栖号