调试一个ajax要吐血了
写了一个英汉词典,具体流程:
1. 把本地文件按照{English: Chinese}的格式写入memcached服务器
2. 通过ajax提交英语单词,并返回中文释义
遇到的问题: 查询对应的单词,可以通过file_put_contents函数写入本地,证明查询到了相应的单词,在客户端,通过readyState属性可以依次看到返回1,2,3,4,但是在window.alert(type res)时显示未定义。
//这部分代码是OK的,用于读取并解析本地的txt格式词典<?php class Word{ private $query_en='#\w+\b#i'; private $query_ch='#[\x{4e00}-\x{9fa5}][\x{4e00}-\x{9fa5},\)\.\( \w]*#u'; private $arr_word=array(); private $recycle_num=100; private $fp=null; public function __construct($fileName) { $this->fp=fopen($fileName,'r') or die('打开ciba失败'); } public function readWord() { while(!feof($this->fp)) { $word=fgets($this->fp); $word=trim($word); if($word=='') continue; $en=$this->parseEn($word); $ch=$this->parseCh($word); $this->arr_word["$en"]=$ch; /* $this->recycle_num--; if($this->recycle_num==0) return; */ } } public function parseEn(&$word) { if(preg_match($this->query_en, $word, $en)) { return $en[0]; } else { echo "match english word failed<br />"; } } public function parseCh(&$word) { if(preg_match($this->query_ch, $word, $ch)) { return $ch[0]; } else { echo "match chinese failed<br />"; } } public function getWord() { return $this->arr_word; } public function __destruct() { fclose($this->fp); }}//$word=new Word('ciba.txt');//$word->readWord();//echo "<pre class="brush:php;toolbar:false">";//print_r($word->getWord());//echo "
"); } public function __destruct() { $this->mem->close(); } public function addWord() { $word=new Word('ciba.txt'); $word->readWord(); $result=$word->getWord(); //echo count($result)."字符
"; //exit(); foreach($result as $en => $ch) { $this->mem->add($en, $ch, MEMCACHE_COMPRESSED, time()+10*24*3600) or die("添加词条失败". __LINE__ ."
"); } } public function setWord($en,$ch) { //控制器判断输入是否合法 $en=$this->filterWord($en); $en=$this->mem->get($en) or die("找不到词条 $en"); $this->mem->set($en, $ch, MEMCACHE_COMPRESSED, time()+31*24*3600) or die("添加词条$en失败"); } public function getWord($en) { //控制器判断输入是否合法 $en=$this->filterWord($en); $ch=$this->mem->get($en) or die("找不到词条 $en"); return $ch; } public function replaceWord($en,$ch) { //控制器判断输入是否合法 $en=$this->filterWord($en); $en=$this->mem->get($en) or die("找不到词条 $en"); $this->mem->replace($en, $ch, MEMCACHE_COMPRESSED, time()+31*24*3600) or die("替换词条$en失败"); } public function deleteWord($en) { //控制器判断输入是否合法 $en=$this->filterWord($en); $this->mem->delete($en,0) or die("删除词条$en失败"); } //过滤掉中文,包括空格的词组,长度大于20的词条 public function filterWord($en){ $en=trim($en); if(preg_match('#[\x{4e00}-\x{9fa5},\)\.\(]+#u', $en)) { //echo '暂时不支持中文查询
'; if(preg_match('#\b[a-z]+\b#i', $en, $res)) { if(strlen($res[0])>20) { //echo "字符过长
"; return strtolower(substr($res[0], 0,20)); } return strtolower($res[0]); } } else if(preg_match('#\s+#', $en)) { //$en=explode(' ', $en); //echo "含有空格
"; $res=null; if(preg_match('#[a-z]+#i', $en, $res)) { if(strlen($res[0])>20) { //echo "字符过长
"; return strtolower(substr($res[0], 0,20)); } return strtolower($res[0]); } } else if(preg_match('#[?_\+\?\*\^\$\#\%\&\/\\,\.!@=\`\'\"\"""]#',$en, $res)) { // //echo '含有非法字符
'; if(preg_match('#[a-z]+#i', $en, $res)) { if(strlen($res[0])>20) { echo "字符过长
"; return strtolower(substr($res[0], 0,20)); } return strtolower($res[0]); } } else if(strlen($en)>20) { //echo "字符过长
"; return strtolower(substr($en, 0,20)); } else { return $en; } } public function flushAll() { $this->mem->flush(); } public function getTime() { if (function_exists("micro_time")) { list($usec, $sec) = explode(" ", microtime()); return ((float)$usec + (float)$sec); } else { return time(); } }}//$mem=new MemStore();//$mem->addWord();//$mem->flushAll();//$mem->replaceWord('abandon', 100000000);//$mem->deleteWord('abandon');//echo $mem->getWord('_*&^%abandon^%$#');//echo "ok"; ?>//下面这段代码也是OK的,根据客户端提交的英语单词,可以成功查询到对应的中文,并写入本地文件成功过getWord($en); $en=$mem->filterWord($en); $res="
ajax调试要吐血了
回复讨论(解决方案)
var res=xmlhttp.responseXML;
window.alert(typeof $res);
一样吗?不一样当然不行
var res=xmlhttp.responseXML;
window.alert(typeof $res);
一样吗?不一样当然不行
哎。这么明显的错误硬是没照出来。。我用的写字本写的代码。。怎么找都找不到。。。zend studio for eclipse 在我的机器上跑步起来,,有什么轻量级,功能齐全,自动高亮,自动补全的IDE推荐吗?
sublime or notepad++
var res=xmlhttp.responseXML;
window.alert(typeof $res);
一样吗?不一样当然不行
//客户端做出如下修改 xmlhttp.onreadystatechange=function() { //window.alert(xmlhttp.readyState); if (xmlhttp.readyState==4 && xmlhttp.status==200) { var res=xmlhttp.responseText; res=eval("("+res+")"); window.alert(res); //var en=res.getElementsByTagName("en")[0].childNodes[0].nodeValue; //var ch=res.getElementsByTagName("ch")[0].childNodes[0].nodeValue; //var en=$("enWord").value; /var ch=res.en; $("chWord").innerText= en+": 的中文意思是: "+ch; } } //服务器这边改成用json传回数据,修改如下<?phpheader("content-type: plain/text; charset=utf-8");require_once "storeWord.php";if(!empty($_GET['enword'])){ $en=$_GET['enword']; $mem=new MemStore(); $ch=$mem->getWord($en); $en=$mem->filterWord($en); $res="<res><en>$en</en><ch>$ch</ch></res>"; file_put_contents('aword.txt', $res."\r\n",FILE_APPEND); //ob_start(); $res='{"'.$en.'":"'.$ch.'"}'; echo $res;}else{ file_put_contents('aword.txt', "receive NON data \r\n",FILE_APPEND);}
//可以收到数据,不过收到的是一个html网页,试图在ob缓存里把结果过滤出来,但最后还是一个空html+结果
我就不明白了这段HTML是拿来的.* ,而且结果是在

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

PHP中有四种主要错误类型:1.Notice:最轻微,不会中断程序,如访问未定义变量;2.Warning:比Notice严重,不会终止程序,如包含不存在文件;3.FatalError:最严重,会终止程序,如调用不存在函数;4.ParseError:语法错误,会阻止程序执行,如忘记添加结束标签。

在PHP中,应使用password_hash和password_verify函数实现安全的密码哈希处理,不应使用MD5或SHA1。1)password_hash生成包含盐值的哈希,增强安全性。2)password_verify验证密码,通过比较哈希值确保安全。3)MD5和SHA1易受攻击且缺乏盐值,不适合现代密码安全。

PHP和Python各有优势,选择依据项目需求。1.PHP适合web开发,尤其快速开发和维护网站。2.Python适用于数据科学、机器学习和人工智能,语法简洁,适合初学者。

PHP在电子商务、内容管理系统和API开发中广泛应用。1)电子商务:用于购物车功能和支付处理。2)内容管理系统:用于动态内容生成和用户管理。3)API开发:用于RESTfulAPI开发和API安全性。通过性能优化和最佳实践,PHP应用的效率和可维护性得以提升。

HTTP请求方法包括GET、POST、PUT和DELETE,分别用于获取、提交、更新和删除资源。1.GET方法用于获取资源,适用于读取操作。2.POST方法用于提交数据,常用于创建新资源。3.PUT方法用于更新资源,适用于完整更新。4.DELETE方法用于删除资源,适用于删除操作。

PHP是一种广泛应用于服务器端的脚本语言,特别适合web开发。1.PHP可以嵌入HTML,处理HTTP请求和响应,支持多种数据库。2.PHP用于生成动态网页内容,处理表单数据,访问数据库等,具有强大的社区支持和开源资源。3.PHP是解释型语言,执行过程包括词法分析、语法分析、编译和执行。4.PHP可以与MySQL结合用于用户注册系统等高级应用。5.调试PHP时,可使用error_reporting()和var_dump()等函数。6.优化PHP代码可通过缓存机制、优化数据库查询和使用内置函数。7

在PHPOOP中,self::引用当前类,parent::引用父类,static::用于晚静态绑定。1.self::用于静态方法和常量调用,但不支持晚静态绑定。2.parent::用于子类调用父类方法,无法访问私有方法。3.static::支持晚静态绑定,适用于继承和多态,但可能影响代码可读性。

PHP通过$\_FILES变量处理文件上传,确保安全性的方法包括:1.检查上传错误,2.验证文件类型和大小,3.防止文件覆盖,4.移动文件到永久存储位置。
