3 回答
TA贡献2080条经验 获得超4个赞
直接调用不可能,但可以绕过去调用
a.php
<?php
$_token = md5(time());//令牌
$_SESSION['_TOKEN'] = $_token;
//....
?>
<html>
...
<form>
<input name="_TOKEN" value="<?php print $_token; ?>">
....
//这里说一下令牌,令牌一般是服务器端验证提交数据是否为合法
//与验证码功能差不多,不过验证码需要手动输入,这个是程序内部使用
...
处理post
<?php
if($_POST['_TOKEN'] == $_SESSION['_TOKEN'])
{
$_SESSION['_TOKEN'] = '';//清除令牌,防止网络延缓的再次提交。
...
}
?>
然后是ajax
上面我为什么要在你原来的程序上加入令牌呢,因为可以随意的调用php函数是很不安全的,很容易被有心人利用,所以做一点安全保护,当然不一定绝对安全
function _new_ajax()
{
//创建XMLHTTPRequests
return 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_user
callback:function(res){
document.getElementById('useridexist').innerHTML = res;
}
})
}
好了,准备就绪,现在看php端了
b.php
<?php
if($_GET['_TOKEN'] == $_SESSION['_TOKEN'])
{
//这里不清除令牌,因为提交post还要使用,验证在前,提交post在后
$function = $_GET['function'];
if(function_exists($function))
{
$function($_GET);
}
else
{
print '函数'.$function.'不存在';
}
}
//以下为函数库
function check_user($get)
{
//.....验证存在否,输出
}
?>
TA贡献1829条经验 获得超6个赞
你利用一个参数传进去不就行了吗...你的意思是我要调用很多次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..
添加回答
举报