前后端数据交互方法

mi_lu mi_lu     2022-08-13     410

关键词:

 以下观点来源于知乎上的总结,个人感觉说的比较全面,总结如下

作者:Nimo True
链接:https://www.zhihu.com/question/26532621/answer/33144979
来源:知乎

1. HTML赋值
2. JS赋值
3. script填充JSON
4. AJAX获取JSON
5. WebSocket实时传输数据
6. 总结

1. HTML赋值
输出到 Element 的 value 或 data-name
<input type="hidden" value="<?php echo $user_avatar;?>" />
<div data-value="<?php echo $user_avatar;?>"></div>

渲染结果
<input type="hidden" value="https://avatars1.githubusercontent.com/u/3949015?v=3&s=40" />
<div data-avatar="https://avatars1.githubusercontent.com/u/3949015?v=3&s=40"></div>

使用 JS 获取
$(‘input‘).val();
// http://jquery.bootcss.com/jQuery.data/
$(‘div‘).data(‘avatar‘);

优点:
不占用全局变量,由 JS 自由获取。


使用建议:

适合传递简单数据,也非常适合多个简单数据与 Element 绑定关系。

<ul>
<li>nimojs <span data-userid="1" >删除</span></li>
<li>nimo22 <span data-userid="2" >删除</span></li>
<li>nimo33 <span data-userid="3" >删除</span></li>
<li>nimo44 <span data-userid="4" >删除</span></li>
<li>nimo55 <span data-userid="5" >删除</span></li>
</ul>
<script>
$(‘span‘).on(‘click‘,function(){
    $.post(‘/ajax/remove/‘,$(this).data(‘userid‘),function(data){
        // ...
    })
})
</script>


2. JS赋值


将数据填充到 `<script>` 的 JavaScript 变量声明中。

<script>
var user_avatar = "<?php echo $user_avatar;?>";
// 渲染结果
// var user_avatar = "https://avatars1.githubusercontent.com/u/3949015?v=3&s=40";
</script>

或使用 Smarty 后端模板引擎:
<script>
var user_avatar = "{$user_avatar}";
</script>

优点:
传递数据非常方便。前端直接调用 user_avatar 变量使用数据。

缺点:
1. 为了传递一个字符串数据占用了全局变量 `user_avatar`,当有很多数据需要传输时则会占用很多全局变量。
2. 如果返回数据存在换行将会导致JS报错

// 渲染结果有换行符
var user_id = "

https://avatars1.githubusercontent.com/u/3949015?v=3&s=40";
// Uncaught SyntaxError: Unexpected token ILLEGAL

优化:
可以通过指向的某一个变量存放所有后端返回的内容,最小程度占用全局变量。例:
// PHP 代码
var SERVER_DATA = {
    username: {$username},
    userid: {$userid},
    title: {$title}
}
// 渲染结果
var SERVER_DATA = {
    username: "NimoChu",
    userid: 1,
    title: ‘F2E‘
}

使用建议:
需要最快速度传递数据给 JS 并十分确定此数据稳定时,使用此方式。数据格式复杂的建议使用script填充JSON 或AJAX获取JSON 方法。

3. script填充JSON
JSON 语法

填充 JSON 数据到 `<script>` 标签中,前端通过 DOM 获取 JSON字符串并解析成对象。
<script type="text/template" id="data">{"username":"nimojs","userid":1}</script>
<script>
var data = JSON.parse($(‘#data‘).html());
//{username:"nimojs",userid:1}
</script>

优点:
页面加载完成后就可以获取到数据。不占用全局变量,可传递大量数据集合。

缺点:
数据量特别大时会导致页面初次加载变慢。变慢并不只是文件大小导致的,也因为服务器查询数据并返回合集是需要时间,可使用AJAX获取JSON完成按需加载和加载等待。

使用建议:
适合传递在DOM加载完成时就需要用到的大量数据集合。例如:前端控制页面渲染,后端将JSON数据源填充到 `<script>` 由前端使用 JavaScript模板引擎 进行页面渲染。
如何选择Javascript模板引擎(javascript template engine)?

4. AJAX获取JSON
使用 AJAX 获取JSON数据

<span id="showdata">查看资料</span>
<div style="display:none;" id="box">
    <h2>用户信息</h2>
    <p id="info"><img src="loading.gif" /></p>
</div>

$(‘#showdata‘).on(‘click‘,function(){
    $(‘#box‘).show();
    $.getJSON(‘/ajax/userdata/‘,function(oData){
        // oData = {"username":"nimojs","userid":1}
        $(‘#info‘).html(‘用户名:‘ + oData.username + ‘<br>用户ID:‘ + oData.userid);
    })
})

这是一个通过AJAX 获取用户资料的示例。流程如下:
1. 页面上只显示查看资料
2. 用户点击查看资料
3. 显示用户信息和 loading 图片
4. 向服务器发送获取用户信息的AJAX请求
5. 服务器返回JSON字符串,$.getJSON 自动将返回的 JSON字符串转换为对象
6. 填充内容到 `<p id="info">`

优点:
不占用全局变量和 DOM 节点,可以自由控制获取数据的触发条件(页面加载完成
时、用户点击查看资料时或用户点击某个按钮时)。当开始获取数据时可使用 loading 图片占位提示用户数据正在读取。防止页面加载所有数据导致的页面加载缓慢。

缺点:
会产生额外的HTTP请求。不能在DOM加载完成以后立即获取,需要发送请求-接收响应。

使用建议:
适合加载非主要信息、设定触发条件(用户点击查看资料时),并提供友好的数据读取等待提示。

5. WebSocket实时传输数据
如果将 AJAX请求和响应比喻成给服务器发短信和等待服务器回复短信,而 WebSocket 就如同和服务器打电话。

此处不对WebSocket做过多介绍,附上参考资料:
1. WebSocket
2. 使用 HTML5 WebSocket 构建实时 Web 应用
3. Ajax vs WebSocket

关于前端和后端数据交互问题

...,非商业转载请注明出处。重新修改答案后整理了一份《前后端数据交互方法》在此介绍几种常用的前后端数据交互方法,并给出使用建议。以提高前后端协同开发的效率。目录:1.HTML赋值2.JS赋值3.script填充JS 查看详情

前后端交互中出现的问题

检查后台传输的数据和方法 1》右键查看源代码 2》找到<scriptsrc="/api/AbpServiceProxies/GetAll?type=angular&amp;v=636191473125693932"></script>单击 3》寻找服务接口名,查看对应的增删改查方法<scriptsrc="/api/AbpServi 查看详情

基于tomcat服务器,通过jquery的ajax方法访问servlet实现前后端数据同步/异步交流(不必跳转或者刷新网页实现jsp前后端交互)

本文将一步步实现在tomcat服务器上实现使用JQuery的Ajax方法访问Servlet从而将前端的数据能够连接到后端,也能使得后端的数据返回到前端。首先我的环境要求:已配置好tomcat服务器,eclipse(使用别的也一样,... 查看详情

axios前后端交互工具学习(代码片段)

文章目录Axios前后端交互工具学习引言引入Axios介绍GET请求的方式then方法catch方法POST请求的方式PUT请求的方式Axios的基本配置Axios的拦截器Vue怎么和Axios配合呢?Axios前后端交互工具学习引言  Axios是一个异步请求技术,... 查看详情

axios前后端交互工具学习(代码片段)

文章目录Axios前后端交互工具学习引言引入Axios介绍GET请求的方式then方法catch方法POST请求的方式PUT请求的方式Axios的基本配置Axios的拦截器Vue怎么和Axios配合呢?Axios前后端交互工具学习引言  Axios是一个异步请求技术,... 查看详情

ssm框架前后端信息交互(代码片段)

一、从前端向后端传送数据常见的3种方式1、form表单的action:此方法可以提交form表单内的输入数据,也可同时提交某些隐藏但设置有默认值的<input>,如修改问题时,我们除了提交问题的相关信息,还需要将用户的编号提交... 查看详情

网站开发过程中,前后端是如何进行交互的?

前后端分离的前提下(前端编写HTML、CSS、JavaScript;后端编写Java处理database),等双方工作都完成后,前后端是如何交互的?方法可能有多种,请举例。通过对数据库的调用管理进行交互。前台一般是对数据库内容按照页面代码... 查看详情

beta冲刺(4/7)

队名:BoyNextDoor燃尽图晗(组长)今日完成界面设计改进前后端交互明日工作改进前后端交互还剩下哪些任务前后端的整合,完善界面设计困难前后端代码过于复杂,交接不便解决方法与组员共同探讨显东今日完成前后端的初步交... 查看详情

beta冲刺(4/7)

队名:BoyNextDoor燃尽图晗(组长)今日完成界面设计改进前后端交互明日工作改进前后端交互还剩下哪些任务前后端的整合,完善界面设计困难前后端代码过于复杂,交接不便解决方法与组员共同探讨显东今日完成前后端的初步交... 查看详情

beta冲刺4/7

队名:BoyNextDoor燃尽图晗(组长)今日完成界面设计改进前后端交互明日工作改进前后端交互还剩下哪些任务前后端的整合,完善界面设计困难前后端代码过于复杂,交接不便解决方法与组员共同探讨显东今日完成前后端的初步交... 查看详情

vue-resource的使用,前后端数据交互(代码片段)

vue-resource的使用,前后端数据交互1:导入vue与vue-resource的js js下载:  https://pan.baidu.com/s/1fs5QaNwcl2AMEyp_kUgFyQ 注意如果是springBoot项目需要在配置文件中排除静态文件的拦截:   post方法:newVue(el:"#app", 查看详情

浅谈前后端交互

...——由后台设计修改(前端是接口文档的使用者)其次,前后端交互的数据,格式是:json,(xml不多了)重要的是,前后端如何交互??——接口地址+前端请求的参数+后台返回的参数  1、接口地址:  2、前端请求的参数... 查看详情

网页前后端交互示例

...此方法经过本人验证有效,并附有代码。首先要实现网页前后台程序的交互需要安装后台框架,本人安装的框架为wamp(windows+apache+mysql+php)。安装程序可以通过我在百度网盘上的分享链接下 查看详情

网页前后端交互示例

...此方法经过本人验证有效,并附有代码。首先要实现网页前后台程序的交互需要安装后台框架,本人安装的框架为wamp(windows+apache+mysql+php)。安装程序可以通过我在百度网盘上的分享链接下载http: 查看详情

flask前后端数据交互

1.后端如何得到前端数据1)如果前端提交的方法为POST:后端接收时要写methods=[‘GET’,‘POST’]xx=request.form.get(xx);xx=request.form[’‘xx’]2)如果是GETxx=request.args.get(xx)2.后端向前端传数据1)传单个数据`returnrender_... 查看详情

vue前后端数据交互问题解决

先在vue项目中配置好路由组件路由然后写相应组件2后端写接口赔路由第三 解决跨域问题处理数据交互这样前端就拿到了数据 查看详情

前后端交互

...,还需要再正确的区域渲染出服务端的数据。那么有哪些前后端交互的技能服务端渲染世界上大多数动态服务页面都是服务端的数据渲染,接口->前端赋值->模板渲染,都是在服务器完成。所以当我们查看源码的时候,我们... 查看详情

前后端交互流程,如何进行交互

(1)前后端都要充分了解项目的需求(2)接口设计(出接口文档),前后端沟通设计接口,前端需要后台返回什么样的数据(格式),后台需要前端传递什么参数(哪些参数是必须的,哪些参数是可选的,采用get还是post,哪些... 查看详情