热门标签 | 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. ?>  

推荐阅读
  • Microsoft即将发布WPF/E的CTP(Community Technology Preview)和SDK,标志着RIA(Rich Internet Application)技术的新里程碑。更多详情及下载链接请参见MSDN官方页面。 ... [详细]
  • 一个登陆界面
    预览截图html部分123456789101112用户登入1314邮箱名称邮箱为空15密码密码为空16登 ... [详细]
  • 在跨浏览器开发中,一个常见的问题是关于如何在鼠标悬停时显示图片提示信息。本文深入探讨了 IE 浏览器对 IMG 元素 alt 属性的特殊处理,并提供了最佳实践建议。 ... [详细]
  • 本文探讨了2019年前端技术的发展趋势,包括工具化、配置化和泛前端化等方面,并提供了详细的学习路线和职业规划建议。 ... [详细]
  • 本文深入探讨了JavaScript中实现继承的四种常见方法,包括原型链继承、构造函数继承、组合继承和寄生组合继承。对于正在学习或从事Web前端开发的技术人员来说,理解这些继承模式对于提高代码质量和维护性至关重要。 ... [详细]
  • 本文将详细介绍如何在ThinkPHP6框架中实现多数据库的部署,包括读写分离的策略,以及如何通过负载均衡和MySQL同步技术优化数据库性能。 ... [详细]
  • 本文探讨了如何通过WebBrowser控件在用户点击输入框时自动显示图片验证码。该过程可能涉及JavaScript事件的触发与响应。 ... [详细]
  • ServletContext接口在Java Web开发中扮演着重要角色,它提供了一种方式来获取关于整个Web应用程序的信息。通过ServletContext,开发者可以访问初始化参数、共享数据以及应用资源。 ... [详细]
  • 解决JAX-WS动态客户端工厂弃用问题并迁移到XFire
    在处理Java项目中的JAR包冲突时,我们遇到了JaxWsDynamicClientFactory被弃用的问题,并成功将其迁移到org.codehaus.xfire.client。本文详细介绍了这一过程及解决方案。 ... [详细]
  • 探讨如何真正掌握Java EE,包括所需技能、工具和实践经验。资深软件教学总监李刚分享了对毕业生简历中常见问题的看法,并提供了详尽的标准。 ... [详细]
  • 本文探讨了如何利用HTML5和JavaScript在浏览器中进行本地文件的读取和写入操作,并介绍了获取本地文件路径的方法。HTML5提供了一系列API,使得这些操作变得更加简便和安全。 ... [详细]
  • 当unique验证运到图片上传时
    2019独角兽企业重金招聘Python工程师标准model:public$imageFile;publicfunctionrules(){return[[[na ... [详细]
  • 本文探讨了浏览器的同源策略限制及其对 AJAX 请求的影响,并详细介绍了如何在 Spring Boot 应用中优雅地处理跨域请求,特别是当请求包含自定义 Headers 时的解决方案。 ... [详细]
  • 深入分析十大PHP开发框架
    随着PHP技术的发展,各类开发框架层出不穷,成为了开发者们热议的话题。本文将详细介绍并对比十款主流的PHP开发框架,旨在帮助开发者根据自身需求选择最合适的工具。 ... [详细]
  • 本文深入探讨网页游戏的开发流程,涵盖从程序框架设计到具体实现的技术细节,旨在为开发者提供全面的指导。 ... [详细]
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社区 版权所有