php ajax 初步应用以及php ajax乱码问题。

php技巧 No Comments

php ajax 的应用主要是用在一些不需要刷新的数据提交上,随便起一个例子
顺便看看php ajax 的乱码问题。

下面是某个xxx.js的源码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
/**
 * 初始化一个xmlhttp对象
 */
function InitAjax()
{
 var ajax=false; 
 try { 
  ajax = new ActiveXObject("Msxml2.XMLHTTP"); 
 } catch (e) { 
  try { 
   ajax = new ActiveXObject("Microsoft.XMLHTTP"); 
  } catch (E) { 
   ajax = false; 
  } 
 }
 if (!ajax && typeof XMLHttpRequest!='undefined') { 
  ajax = new XMLHttpRequest(); 
 } 
 return ajax;
}
 
 
function go()
{
 
var currSelectValue = document.getElementById("username").value; 
 
 //接收表单的URL地址
 var url = "./index.php";
 
//需要POST的值,把每个变量都通过&来联接
 var postStr  = "username="+ currSelectValue;
 
//实例化Ajax
 var ajax = InitAjax();
 
 //通过Post方式打开连接
 ajax.open("POST", url, true); 
 
 //定义传输的文件HTTP头信息
 ajax.setrequestheader("content-length",postStr.length); 
 ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); 
 
 //发送POST数据
 ajax.send(postStr);
 
 //获取执行状态
 ajax.onreadystatechange = function() { 
  //如果执行状态成功,那么就把返回信息写到指定的层里
  if (ajax.readyState == 4 && ajax.status == 200) { 
 
	 msg.innerHTML = ajax.responseText; 
 
  } 
 }
 
}
 
//对应的index.php 也许是这个样子
 
<?php
header("Content-Type:text/html;charset=GBK"); //指定php输出编码为gbk 防止乱码
 
$username = $_POST['username'];
 
$username = iconv('utf-8','gbk',$username); //请记住ajax进来的参数都是utf-8格式的,一般需要转换
 
exit('你的名字是:'.$username);
 
?>
 
 
//对应的html也许是这个样子
<input type="text" id="username" value="" /> //输入username的地方
 
<div id="msg"></div>
 
//其他代码省略。

这就是一个相对完整的php ajax应用了,当然上面的程序什么也没干
它的经过是这样:
在input框里输入一些字符(你可以试试中文以便验证回显是否乱码)
然后通过类似 onclick=”go()” 这样的方式去执行 go 函数
go函数里面写得很详细了,它把需要的参数组织起来,做成一个 url,然后通过Post方式打开连接。
这个链接执行了index.php这个php程序。取得username直接返回,反馈的信息会显示在msg.innerHTML

这里要说一句,思想要放开点,如果你把exit那句代码改成
exit(’
我的名字是:‘.$username.’‘); 它将会先回车一行,然后显示 我的名字是:xxxx
xxxx还是红色的字体哦。

所以,相当于你几乎可以做任何事情。

上面是php ajax 的post方式传递,还有另外一种get方式传递

get只传递比较少的值
上面的xxx.js大约改成这样

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
function go()
{
 
var currSelectValue = document.getElementById("username").value; 
 
 //接收表单的URL地址
 var url = "./index.php?username="+currSelectValue;
 
//实例化Ajax
 var ajax = InitAjax();
 
 //通过Post方式打开连接
 ajax.open("GET", url, true); 
 
 //定义传输的文件HTTP头信息
 ajax.setrequestheader("content-length",postStr.length); 
 ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); 
 
 
 
 //获取执行状态
 ajax.onreadystatechange = function() { 
  //如果执行状态成功,那么就把返回信息写到指定的层里
  if (ajax.readyState == 4 && ajax.status == 200) { 
 
	 msg.innerHTML = ajax.responseText; 
 
  } 
 }
 
//发送空
 ajax.send(null);
 
}

其实差不多的。

php ajax使用注意:
1.多个参数传递需要用&连接起来
2.POST 方式传递的时候,表单

里面不需要 method=”post” action=”" 这些东西
3.参数经过ajax 传到php里,必然是utf8的,请注意转码。
一般情况下是可以防止php ajax乱码的。

php 参数传递以及php获取url参数之后的较合理安排

php技巧 No Comments

php 传参数,有两种方式GET 和POST,今天说的是url里面的参数传递,php get参数方法
举例一下,index.php?do=fly
$_GET[’do’] 这样就能取到fly这个值了,这个时候,我们php url的参数传递的一个特点就出来了
1.很明显,它是明文的,所以它是不保密的哦
问题来了,我要保密怎么办?以面的参数为例,你可以把fly算成另外的值
直观点就是:fly加密得到 abcdef 这个值 也就是说 abcdef在你的程序里就代表了fly这个值,而对外人来说就是无意义的值了。。。(说的好罗嗦啊。。。。。)

2.参数的合理安排
php参数传递来后的合理安排,这个是从Comsenz Inc. 出的ucenter home 里面学来的。
废话不多说,看源代码片段,全代码请自行下载了~

1
2
3
4
5
6
7
8
9
//以space.php为例
//允许动作
$dos = array('feed', 'doing', 'blog', 'album', 'thread', 'mtag', 'friend', 'wall', 'tag', 'notice', 'share', 'home', 'pm', 'app');
 
//...省略数句,直接看这个
$do = (!empty($_GET['do']) && in_array($_GET['do'], $dos))?$_GET['do']:'index';
 
//最后根据动作的值分到其他模块
include_once(S_ROOT."./source/space_{$do}.php");

要虚心学习这段程序的大方向,:-)

它是这个意思:space.php 这个执行脚本,只允许传递$dos数组里的存在的值
比如如果脚本space.php这样传递了参数: space.php?do=feed,那么上面的代码将会直接冲向 space_feed.php去执行!
这样我觉得至少有两个好处
1.一般可以无视用户传来的不合理值,因为它会默认space.php?do=index,看看中间那句(老实说,我是不常用,不过自此以后,我要开始用了)
2.减少space.php的文件大小,这个怎么说呢?
假设你原来有do=index(假设代码量10k) 和 do=blog(假设代码量5k) 两个值
如果不按照上面的方法”分流”的话,那么space.php的代码量就是 do=index + do=blog 约等于15k了
如果”分流”的话 space.php 1k space_index.php 10k space_blog.php 5k
看见了吗?你做space.php?do=blog 这个动作的时候,只需要执行 space.php + space_blog.php = 1+5 = 6k的代码量,而不需要把整个15k的总代码都弄进来搅。

说了一大通不知道对不对,不过这样的大方向,我看是值得学习的。

超级简化的js 确认框,弹出确认取消对话框

网页设计 No Comments

确认删除或者确认提交的时候,经常需要弹出一个确认框。

今天看到一个js的确认方法,超级简单

1
<input type="submit"  value="永久删除" onclick="return(confirm('确定删除?'))" />

让js每次都读取新内容忽略缓存

php技巧 No Comments

我有这么一段代码

1
<script src="show.php" type="text/javascript"></script>

 
这个是在网页加载的同时,暗地里执行一段php,为网页里的js 参数赋值的
在调试过程中,我就发现:改一次show.php,按F5,实际上是没有变化的,必须按ctrl+F5(忽略缓存强制更新)。
这是十分讨厌的问题。
而且如果你结合ajax的话,会发现,其实后台数据已经变化好了,但是你按F5,仍然是不更新的。
问题就出在这个暗中调用的show.php,每次都是读取缓存,造成数据不更新。

解决的方向一般是,show.php每次都加上不同的参数,比如show.php?time=time() 这样,ie这个笨蛋就认为这是个新链接,它就会去读取新的内容了。
有两种带入的参数可选
1.随机数
2.时间数 (用毫秒的)
上面的代码大概改成类似这个样子

1
2
<script src="show.php?time={$time}" type="text/javascript"></script>
//其中{$time} 你喜欢用什么生成就用什么生成。
Icons by N.Design Studio. Designed By Ben Swift. Powered by WordPress and Free WordPress Themes
Entries RSS Comments RSS Log in