作者foxzgerald (O⊥M)
看板PHP
标题Re: [请益] php和javascript
时间Sat Jun 23 03:02:09 2007
※ 引述《sonic010739 (http://0rz.net/410zd)》之铭言:
: 我现在需要一个能够输入数值然後可以自动计算的javascript
: 不过情况有点特殊,跟一般输入两个数字自动计算出来不同
: 共有两个栏位 一个是选择商品 另一个是数量
: 第一个栏位
: ...
: <select name="pid">
: <option value="pid">商品名称(价钱)</option>
: ^ ^ ^
: //这三个数值都是从资料库取出的资料
: </select>
: ...
: 另一个栏位则是输入商品的数量
: 然後可以透过js去自动计算出总价放在第三个栏位
: 然後再交给後端的php程式去做资料储存的动作
: 目前的困难是我找不到合适的js来做自动计算的动作 (对js不熟悉)
: 有人有相关的经验或是资讯可以提示我一下吗 只使用php+JS可以达成的
: 谢谢
AJAX 是 Asynchronous JavaScript and XML 的缩写。
若依其严格定义,应指:以非同步的方式(同时)将 JS 和 XML
用在 client 与 server 间的通讯上。但其实很多时候不需要
劳烦到 XML;单靠着 JS 就可以完成很多事情。
首先,必须知道 client 和 server 间的沟通,是藉着字串串
流(string stream)传递讯息。在前述的概念上,HTML 和 XML
其实都只是一种经过格式化的
字串串流。
不同於未经格式化的字串,XML 可以藉剖析器(parser)将字
串内容转换成对电脑有意义/可操作的元素。
JSON 也是种格式化的字串,而其定义了变数在不同程式间/程
式语言间的交换标准。
只需遵照着格式,便能将变数转为字串串流、或(使用剖析器)
将字串串流重新转为变数。
(对於剖析有疑问的人,可以去 wiki 或 google "parser" :P)
倘若了解上述字串串流的概念,那麽这个问题应该不难解决;
因为问题就变成,用怎样的流程去传递/处理这些字串。
解决这个问题,大致可以拆解成 client 和 server 两部分。
client端,也就是 Browser里头可以借用 javascript来计算,
藉着一些 event (例如 onLoad, onUnLoad, onClick...)
来触发 javascript 的 function,而该 function 则负责
将之前计算的结果转成字串後、传递给 server 上相应的 php 处理。
以下为示范用的程式码(因为省略很多东西,所以可能没法执行XD)
======================================================
// FILE: client.php ..底下的是该 php所输出的 html
// 也就是 browser 所能看到的内容
<script>
var price; //示范方便,所以使用全域变数
function save() {
// 透过 iframe 来达成背景传递讯息的目的;
// 这是在 XML 被广泛应用到非同步处理之前常用的做法
var comm = document.getElementById('comm_iframe');
// 产生连结字串;使用 GET的方式将变数传递到 server.php
var linkstr = 'server.php?price="' + price + '"';
comm.location.href=linkstr;
}
function counter() {
// 计算价格,并将结果储存到 price
}
</script>
<body onUnLoad="save()"><!-- 离开页面时储存 -->
<iframe id="comm_iframe" class="empty"></iframe>
<!-- 透过 css 让 iframe 「隐形」..BTW, empty 的 css 要自己写 XD -->
<select name="pid" onChange="counter">
<option value="100">商品名称(价钱)</option>
</select>
</body>
====================================================
大致上只要设计得当,让 javascript 在预期的情况下被触发
然後执行类似 save() 等函式,便能在不使用 XML 的情况下
仍然达到非同步的目的..
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.119.199.121
※ 编辑: foxzgerald 来自: 140.119.199.121 (06/23 03:07)
1F:推 sonic010739:感谢^^ 06/23 11:09