javascript php变量中嵌套php,读取数据复制给javascript php变量变量

前端 ,后端 关于数据交互的问题?
今天,我和我同事在讨论php 与js交互的时候,他认为:&script type="text/javascript"&
var type = &?php echo $user_intern_?&;
....&/script&我认为这样比较乱,如果交互数据多了的话,所有,我改成这样&div id="hide_value"&&input type="hidden" id="user_intern_status" value="&?php echo $user_intern_?&"&...&/div&&script&
var type = $("#hide_value #user_intern_status").val();
...&/script&他说我这样写很麻烦,没必要。我想知道大家是咋想的,又如何处理前端(js)与后端(jsp,php等)的数据交互的。
按投票排序
重新修改答案后整理了一份《前后端数据交互方法》在此介绍几种常用的前后端数据交互方法,并给出使用建议。以提高前后端协同开发的效率。
目录:1. HTML赋值2. JS赋值3. script填充JSON4. AJAX获取JSON5. WebSocket实时传输数据6. 总结1. HTML赋值输出到 Element 的 value 或 data-name &input type="hidden" value="&?php echo $user_?&" /&
&div data-value="&?php echo $user_?&"&&/div&
渲染结果&input type="hidden" value="/u/3949015?v=3&s=40" /&
&div data-avatar="/u/3949015?v=3&s=40"&&/div&
使用 JS 获取$('input').val();
// /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&
$('span').on('click',function(){
$.post('/ajax/remove/',$(this).data('userid'),function(data){
2. JS赋值将数据填充到 `&script&` 的 JavaScript 变量声明中。&script&
var user_avatar = "&?php echo $user_?&";
// 渲染结果
// var user_avatar = "/u/3949015?v=3&s=40";
或使用 Smarty 后端模板引擎:&script&
var user_avatar = "{$user_avatar}";
优点:传递数据非常方便。前端直接调用 user_avatar 变量使用数据。缺点:1. 为了传递一个字符串数据占用了全局变量 `user_avatar`,当有很多数据需要传输时则会占用很多全局变量。2. 如果返回数据存在换行将会导致JS报错// 渲染结果有换行符
var user_id = "
/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 数据到 `&script&` 标签中,前端通过 DOM 获取 JSON字符串并解析成对象。&script type="text/template" id="data"&{"username":"nimojs","userid":1}&/script&
var data = JSON.parse($('#data').html());
//{username:"nimojs",userid:1}
优点:页面加载完成后就可以获取到数据。不占用全局变量,可传递大量数据集合。缺点:数据量特别大时会导致页面初次加载变慢。变慢并不只是文件大小导致的,也因为服务器查询数据并返回合集是需要时间,可使用AJAX获取JSON完成按需加载和加载等待。使用建议:适合传递在DOM加载完成时就需要用到的大量数据集合。例如:前端控制页面渲染,后端将JSON数据源填充到 `&script&` 由前端使用 JavaScript模板引擎 进行页面渲染。4.
AJAX获取JSON使用 AJAX 获取JSON数据&span id="showdata"&查看资料&/span&
&div style="display:" id="box"&
&h2&用户信息&/h2&
&p id="info"&&img src="loading.gif" /&&/p&
$('#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. 2. 3. 6. 总结每种情况都有每种情况的用处,没有绝对正确的方法。根据实际情况灵活的选择获取数据方式。若作者显示不是Nimo(被转载了),请访问Github原文进行讨论:
卧槽。。你和你的同事从来没听过PHP框架这种概念?
任何时候两种不同的技术发生硬耦合都是非常糟糕的软件设计,因为会带来不可调试、不可追踪等问题,每一种技术都有自己从开发到调试、测试甚至是构建的一套完整技术栈和工作流,当两种技术耦合在一起就会让这个工作流部分或完全失效。所以从这个角度看,虽然问题里面提出的第二种优于第一种,但是两种方式本质上都是一个问题:硬耦合。第一种方案 JavaScript 和 PHP 耦合在一起了,第二种 HTML 和 PHP 耦合在一起了。所以还有更合理的解决办法,那就是前后端完全 decouple,通过 API 通信获取数据,用 JavaScript 动态渲染页面。
写页面的几个人呢?如果前端只有一个,那两种方案都可以。前端再拆分,写html和写js的分工的话,第二种更好。还有拆得更合理的方案,就是自定义属性,毕竟第二个方案添加了无意义的元素,不如直接&div id="hide_value" data-val="{user_intern_status:'&?php echo $user_intern_?&'}"&,甚至hide_value这个元素都可以用不着,直接在其父元素上定义就可以了。获取就是 var data= xx.getJson($("#hide_value").attr('data-val')), jQuery本身没有json处理函数,自己随便搜个下来用吧。不过这些东西不是都是前端来写吗?后端只负责给出 $user_intern_status,怎么调用是前端自己定的。
第二种啊js肯定要分离出来的,到时候还要改成第二种php 和html分离 到是大可不必,php本身就是个语言+模板引擎啊目前排名最高的那个答案给的SEO解决方案操作起来太复杂,工作量翻好几倍,尤其是页面改动后的测试
为啥不用 php+smarty的框架呢
你同事的意思是 要把所有的js代码写到php文件里面?
不然真不明白第一种写法怎么跑的通想前后端通讯数据 就用ajax啊。
写法都没有错,得看实际情况再挑选最实惠的做法。
你不会用smarty动静分离么。或者写jquery
用框架就有框架自带的方法,但还是觉得js和php要分开来,因为js的变化实在太平凡了。
其实个人觉得你这样更乱,除非数据是需要通过表单提交的,不然直接赋值给变量不是更好么?明明一行代码操作就OK的事情,你要用两行代码。设计一个HTML文件,在文件中嵌入一段JavaScript程序,当用户打开该页面时,能够利用JavaScript获取系统当前时间
设计一个HTML文件,在文件中嵌入一段JavaScript程序,当用户打开该页面时,能够利用JavaScript获取系统当前时间
&设计一个HTML文件,在文件中嵌入一段JavaScript程序,当用户打开该页面时,能够利用JavaScript获取系统当前时间
复制下面的代码保存成html即可:&!---复制下面代码不包括这行
&meta http-equiv="Content-Type" content="text/ charset=utf-8" /&
&title&显示当前时间&/title&
function getCurrentTime(){
& var currentTime=new Date()
& document.write(currentTime.toLocaleDateString()+"&&"+currentTime.toLocaleTimeString());
}&/script&
&body bgcolor="#00FF99" &
当前时间是:&script&getCurrentTime()&/script&
----复制上面代码不包括这行--&
复制下面的代码保存成html即可:&!----------复制下面代码不包括这行&html&&head&&meta http-equiv="Content-Type" content="text/ charset=utf-8" /&&title&显示当前时间&/title&&script&function getCurrentTime(){& var currentTime=new Date()& document.write(currentTime.toLocaleDateString()+"&&"+currentTime.toLocaleTimeString());}&/script&&/head&&body bgcolor="#00FF99" &当前时间是:&script&getCurrentTime()&/script&&/body&&/html&--------------复制上面代码不包括这行----------&
其他回答 (1)
&html& &head& &script language=&JavaScript&& tmpDate=new Date(); hour=tmpDate.getHours(); if(hour&6) { alert(&凌晨好,掠影网,欢迎你!&); } else if(hour&12) { alert(&上午好,掠影网,欢迎你!&) }
else if(hour&14) { alert(&中午好,掠影网,欢迎你!&) }
else if(hour&18) { alert(&下午好,掠影网,欢迎你!&
else if(hour&22) { alert(&晚上好,掠影网,欢迎你!&) }
else { alert(&夜深了,掠影网提醒你注意休息&); } &/script& &/head& &/html&
这个就是我网站的获取时间的代码,你可以适当修改下。
相关知识等待您来回答
网页制作领域专家
& &SOGOU - 京ICP证050897号PHP如何获得javascript中的变量值
[问题点数:20分,结帖人generalxu]
PHP如何获得javascript中的变量值
[问题点数:20分,结帖人generalxu]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
2009年12月 PHP大版内专家分月排行榜第二2009年5月 PHP大版内专家分月排行榜第二2009年2月 PHP大版内专家分月排行榜第二2009年1月 PHP大版内专家分月排行榜第二
2009年9月 PHP大版内专家分月排行榜第三2009年3月 PHP大版内专家分月排行榜第三
2009年12月 PHP大版内专家分月排行榜第二2009年5月 PHP大版内专家分月排行榜第二2009年2月 PHP大版内专家分月排行榜第二2009年1月 PHP大版内专家分月排行榜第二
2009年9月 PHP大版内专家分月排行榜第三2009年3月 PHP大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。}

我要回帖

更多关于 javascript php变量 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信