热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

phpajax开发中的注意事项.

最近在学php,由于项目的需要!想在php中用ajax来完成一些体验(减少业务处理的单页压力).发现最近也有一位朋友为此苦恼不已.不废话

最近在学php,由于项目的需要!想在php中用ajax来完成一些体验(减少业务处理的单页压力).发现最近也有一位朋友为此苦恼不已.不废话了!

1.注意几个编码地方

1.1表单所在的网页的:meta

1.2XMLHTTPRequest GET的编码

httpRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");

此处设置不对!responseText会返回empty(没有内容),如果您有FireFox并装有FireBug组件的话,点击状态栏的绿色箭头打开控件面板(非OS的,FireBug的),选中Console会看到Response选项是:

Illegal mix of collations (gbk_chinese_ci,IMPLICIT) and (latin1_swedish_ci,COERCIBLE) for operation '=

当然如果是连接数据库的话也可能跟下面的(1.4)有关系.

1.3ajax GET请求的页面(.php)header

header("Content-Type:text/html;charset=UTF-8");

1.4数据连接的编码

mysql_query("SET CHARACTER SET UTF8");

如果你的数据库是GBK的或其它的字符集,为了统一编码还要与以上三个统一起来.下面我的示例用的数据库也是GBK,从昨天开始我一起把它设成:

mysql_query("SET CHARACTER SET GBK");

可还是有时发现会返回空(empty 我用的是ResponseText),千万不要写成UTF-8噢,数据库的字符集是没有中间的"-"

2.如果还是返回空或无效的值

例如:

a.html中有表单,a用XMLHTTPRequest和b.php通讯.

首先要保证b.php可以正确运行,例b.php?param=value打印出来的是你期望的值

如果a.html打印b.php返回的结果(ajax)与上面的(单独运行b.php)执行结果有出入.可以删除b.php中的空行试试!我想应该不会出现这种情况,但我有几次作demo删除后和删除前确实有出入

3.下面是朋友发给我的一个示例!我修改完的源码

表单页:

3.1JS部分

[html] view plaincopyprint?
  1. function processRequest() {  
  2.   
  3.     var tran;  
  4.   
  5.     if (httpRequest.readyState == 4 || httpRequest.readyState == "complete") {   
  6.   
  7.         if (httpRequest.status == 200 || httpRequest.statusText == "OK") {   
  8.   
  9.             tran = httpRequest.responseText;                  
  10.   
  11.             //setGlobalValue(tran);  
  12.   
  13.             alert(tran);  
  14.   
  15.          } else {   
  16.   
  17.             alert("您所请求的页面发生错误!");  
  18.   
  19.          }  
  20.   
  21.     }  
  22.   
  23. }  
  24.   
  25. function sendRequest(strurl) {    
  26.   
  27.     httpRequest = false;  
  28.   
  29.           
  30.   
  31.     if (window.XMLHttpRequest) { // Mozilla, Safari, ...  
  32.   
  33.         httpRequest = new XMLHttpRequest();              
  34.   
  35.     } else if (window.ActiveXObject) { // IE  
  36.   
  37.         try {  
  38.   
  39.             httpRequest = new ActiveXObject("Msxml2.XMLHTTP");  
  40.   
  41.         } catch (e) {  
  42.   
  43.             try {  
  44.   
  45.                 httpRequest = new ActiveXObject("Microsoft.XMLHTTP");  
  46.   
  47.             } catch (e) {}  
  48.   
  49.         }  
  50.   
  51.     }  
  52.   
  53.     if (!httpRequest) {   
  54.   
  55.         window.alert("通讯失败");  
  56.   
  57.             return false;  
  58.   
  59.     }  
  60.   
  61.     httpRequest.onreadystatechange = processRequest;      
  62.   
  63.     httpRequest.open("GET", strurl, true);  
  64.   
  65.     httpRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");  
  66.   
  67.     httpRequest.send(null);  
  68.   
  69. }>}  
function processRequest() {

	var tran;

    if (httpRequest.readyState == 4 || httpRequest.readyState == "complete") { 

    	if (httpRequest.status == 200 || httpRequest.statusText == "OK") { 

        	tran = httpRequest.responseText;                

            //setGlobalValue(tran);

            alert(tran);

         } else { 

            alert("您所请求的页面发生错误!");

         }

    }

}

function sendRequest(strurl) {  

    httpRequest = false;

        

    if (window.XMLHttpRequest) { // Mozilla, Safari, ...

    	httpRequest = new XMLHttpRequest();            

    } else if (window.ActiveXObject) { // IE

        try {

        	httpRequest = new ActiveXObject("Msxml2.XMLHTTP");

        } catch (e) {

            try {

            	httpRequest = new ActiveXObject("Microsoft.XMLHTTP");

            } catch (e) {}

        }

	}

   	if (!httpRequest) { 

        window.alert("通讯失败");

            return false;

    }

    httpRequest.Onreadystatechange= processRequest;    

    httpRequest.open("GET", strurl, true);

    httpRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");

    httpRequest.send(null);

}>}
[html] view plaincopyprint?
  1. function asychronouscheck(strparam){      
  2.   
  3.     if(strparam.value.length == 0){  
  4.   
  5.         document.getElementById("state3").innerHTML="新帐号不能为空";          
  6.   
  7.     }  
  8.   
  9.     var strurl="checknewaccount.php?name="+encodeURIComponent(strparam.value);      
  10.   
  11.     sendRequest(strurl);  
  12. <BR pre="">  
function asychronouscheck(strparam){    

    if(strparam.value.length == 0){

        document.getElementById("state3").innerHTML="新帐号不能为空";        

    }

    var strurl="checknewaccount.php?name="+encodeURIComponent(strparam.value);    

    sendRequest(strurl);

表单部分

[html] view plaincopyprint?
  1. <dl>  
  2.   
  3.                 <dt>新帐号dt>  
  4.   
  5.                 <dd><label id="state3">label>dd>  
  6.   
  7.                 <dd><input type="text" name="nusername" id="nusername" size="26" maxlength="14" onblur="asychronouscheck(this)" />dd>  
  8.   
  9. dl>         
新帐号

php文件

[php] view plaincopyprint?
  1.   
  2. header("Content-Type:text/html;charset=UTF-8");  
  3.   
  4. $conn=mysql_connect('localhost','root','bus');  
  5.   
  6. mysql_select_db('test',$conn);  
  7.   
  8. mysql_query("SET CHARACTER SET UTF8");  
  9.   
  10. $curName=GET['name'];  
  11.   
  12. if(empty($curName)){  
  13.   
  14.     echo "新帐号不能为空";  
  15.   
  16.     exit();  
  17.   
  18. }  
  19.   
  20. $tSQL="SELECT uid FROM members WHERE username ='$curName'";  
  21.   
  22. try{      
  23.   
  24.     $result=mysql_query($tSQL) OR die(mysql_error());  
  25.   
  26.     $row = mysql_num_rows($result);  
  27.   
  28.     flush();       
  29.   
  30.     if($row>0){              
  31.   
  32.         echo "false";  
  33.   
  34.     }else{  
  35.   
  36.         echo "true";  
  37.   
  38.     }        
  39.   
  40.     mysql_free_result($result);  
  41.   
  42.     mysql_close($conn);  
  43.   
  44. }catch(Exception $e){  
  45.   
  46.     print $e->getMessage();  
  47.   
  48. }  
  49.   
  50. ?>  

推荐阅读
  • 动态json文件php(json拼接动态数据)
    本文目录一览:1、如何php将一个动态的数组转换为json的格式 ... [详细]
  • JavaScript与DOM(上)——也适用于新手 – 深入理解JavaScript系列 23
    本文是《JavaScript深度解析》系列文章第23篇(共51篇)文档对象模 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ... [详细]
  • 本文介绍了使用cacti监控mssql 2005运行资源情况的操作步骤,包括安装必要的工具和驱动,测试mssql的连接,配置监控脚本等。通过php连接mssql来获取SQL 2005性能计算器的值,实现对mssql的监控。详细的操作步骤和代码请参考附件。 ... [详细]
  • 前端提高篇(七十):SVG基本使用、基本样式、路径path
    SVG是使用XML来描述二维图形和绘图程序的语言。SVG遵循的是xml的规范,与html5的使用有所区别SVG绘制出来的是矢量图,放大之后不会失真官方文 ... [详细]
  • 前端图片合成技术_靠谱的前端需要做哪些准备?
    Web前端开发源于传统的互联网,互联网普及让人才需求量居高不下,随着移动互联网的高速发展,移动终端的前端开发也越来越受到重视, ... [详细]
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
  • 本文介绍了DataTables插件的官方网站以及其基本特点和使用方法,包括分页处理、数据过滤、数据排序、数据类型检测、列宽度自动适应、CSS定制样式、隐藏列等功能。同时还介绍了其易用性、可扩展性和灵活性,以及国际化和动态创建表格的功能。此外,还提供了参数初始化和延迟加载的示例代码。 ... [详细]
  • Allegro总结:1.防焊层(SolderMask):又称绿油层,PCB非布线层,用于制成丝网印板,将不需要焊接的地方涂上防焊剂.在防焊层上预留的焊盘大小要比实际的焊盘大一些,其差值一般 ... [详细]
  • css元素可拖动,如何使用CSS禁止元素拖拽?
    一、用户行为三剑客以下3个CSS属性:user-select属性可以设置是否允许用户选择页面中的图文内容;user-modify属性可以设置是否允许输入 ... [详细]
  • asp.net(vb脚本)如何获取xml的节点值?xmlversion1.0encodingutf-8?rootimageimagemenusmenuurl#frame_paren ... [详细]
  • 1、概述首先和大家一起回顾一下Java消息服务,在我之前的博客《Java消息队列-JMS概述》中,我为大家分析了:然后在另一篇博客《Java消息队列-ActiveMq实战》中 ... [详细]
  • JavaWeb介绍概念JavaWeb,是用Java技术来解决相关web互联网领域的技术总和。web包括:web服务器和web客户端两部分。Java在客户端的应用有javaapplet,不过使 ... [详细]
  • 采集程序【开源项目】
    更新:通过一些朋友的回复,了解到,可能文章太长了,有朋友只是简略浏览,所以还没有明白程序工作流程。简单介绍&# ... [详细]
author-avatar
_珊渣渣
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有