ajax调用PHP类库中的函数,这是为什么呢?求解释!

我在编写网站是使用ajax异步调用php文件,这样很麻烦,我想如歌ajax能调用PHP类库中的函数就最好了。我的ajax代码如下:
function useridexist()
{
var userid=document.login.userid.value;
xhr.open("GET","class/useridexist.php?id="+userid,true);
xhr.onreadystatechange=showidexist;
xhr.send(null);

}
function showidexist()
{
if(xhr.readyState == 1)
{
document.getElementById('useridexist').innerHTML="Check the ID, Please wait...";
}
if(xhr.readyState == 4)
{
if(xhr.status == 200)
{
var result=xhr.responseText;
document.getElementById('useridexist').innerHTML=result;
}
}
}
我不想每次都是class/useridexist.php?id="+userid,true);而是最好可以到PHP的类库中调用函数。非常感谢你的回答!!
一楼的方法我想过,但是这样还是需要写很多的页面的,我需要的办法是在一个页面中的PHP类库中的不同函数来解决这些问题,谢谢!!

桃花长相依
浏览 207回答 3
3回答

犯罪嫌疑人X

直接调用不可能,但可以绕过去调用a.php<?php$_token = md5(time());//令牌$_SESSION['_TOKEN'] = $_token;//....?><html>...<form><input name="_TOKEN" value="<?php print $_token; ?>">....//这里说一下令牌,令牌一般是服务器端验证提交数据是否为合法//与验证码功能差不多,不过验证码需要手动输入,这个是程序内部使用...处理post<?phpif($_POST['_TOKEN'] == $_SESSION['_TOKEN']){$_SESSION['_TOKEN'] = '';//清除令牌,防止网络延缓的再次提交。...}?>然后是ajax上面我为什么要在你原来的程序上加入令牌呢,因为可以随意的调用php函数是很不安全的,很容易被有心人利用,所以做一点安全保护,当然不一定绝对安全function _new_ajax(){//创建XMLHTTPRequestsreturn xhr;}function _ajax(_option)//url, data, type, async{//初始化if(typeof _option.url == 'undefined' || _option.url == ''){alert('ajax错误,没有定义请求路径');return false;}_option.data = _option.data || {};_option.type = _option.type || 'GET';_option.async = _option.async || true;_option.callback = _option.callback || function(){};//开始请求var xhr = _new_ajax();if(typeof _option.data == 'string'){_option.url += (_option.url.match(/\?/) ? "&" : "?") + _option.data;}else{for(var i in _option.data){_option.url += (_option.url.match(/\?/) ? "&" : "?") + i + '=' + _option.data[i];}}xhr.open(_option.type, _option.url, _option.async);xhr.onreadystatechange = function(){if(xhr.readyState == 4 && xhr.status == 200){var res = xhr.responseText;_option.callback(res);}};xhr.send(null);xhr = null;}上面的是我简单写的,估计考虑不是很全验证用户是否存在就这样function check_user_id(){document.getElementById('useridexist').innerHTML = "Check the ID, Please wait...";var user_id = document.login.userid.value;//这里是上面说的,要直接使用函数库,必须安全验证var _TOKEN = document.login._TOKEN.value;_ajax({url:'class/useridexist.php',data:{_TOKEN:_TOKEN, function:check_user, id:user_id},//调用php函数check_usercallback:function(res){document.getElementById('useridexist').innerHTML = res;}})}好了,准备就绪,现在看php端了b.php<?phpif($_GET['_TOKEN'] == $_SESSION['_TOKEN']){//这里不清除令牌,因为提交post还要使用,验证在前,提交post在后$function = $_GET['function'];if(function_exists($function)){$function($_GET);}else{print '函数'.$function.'不存在';}}//以下为函数库function check_user($get){//.....验证存在否,输出}?>

肥皂起泡泡

你利用一个参数传进去不就行了吗...你的意思是我要调用很多次ajax.但是每次它所请求的页面都不一样(也就是说..每个类库都是一个页面)..这样就要写很多函数是吧???function useridexist(class){var userid=document.login.userid.value;xhr.open("GET","class/"+class+".php?id="+userid,true);xhr.onreadystatechange=showidexist;xhr.send(null);}我知道你的意思了.有种很简单的方法..你带一个参数进去..比如一个页面里面都是函数..那么$_get[arg]..这样就行了..将函数的名字用参数带过去..然后函数页面获取..得到的是哪个值就相应的运行v..

忽然笑

如果你只是想省下这个参数传递。用 SESSION 或者 COOKIE 就可以了。只是改变一下参数传递方式罢了。不用 GET&nbsp;
打开App,查看更多内容
随时随地看视频慕课网APP