PHP 클래스 ("자동로드")를 제어하고로드하는 데 사용하는 일반 클래스 로더를 작성했습니다. 코드의 일부는, 단순화 :PHP & AJAX : 알 수없는 인수 번호로 동적 메서드를 호출하는 방법
PHP 파일 :
namespace Ajax;
require_once '../Loader.php';
class Loader extends \Loader{
static public function getAjaxResponse($Post){
if (!\Checker::isClassName($Post['className']) || !\Checker::isMethodName($Post['method'])){
return '';
}
Loader::loadClass($Post['className']);
$class = '\\'.$Post['className'];
$handler = array($class, $Post['method']);
if (is_callable($handler)){
$oClass = new $class(true);
return $oClass->$Post['method']($Post['params']);
}
}
}
new Loader;
echo Loader::getAjaxResponse($_POST);
JS 파일 :
var requestData = {
className : 'Menu',
method : 'assignItemToMenu',
params : { IdItem: $('input[name="IdItem"]').val(), IdParent:$('select[name="IdParent"]').val() }
};
if ($('#itemsSortOrder').children().length == 0){
$.extend(requestData.params, {addButtons : true});
}
$.post('../classRepository/Ajax/Loader.php?open=' + $_GET['open'], requestData)
.success(function(data){
document.write(data);
window.alert(data);
})
.error(function(){
window.alert('Retrieving data failed.');
});
가 작동합니까를? AJAX 요청에서 하나의 매개 변수 만 보내면 JS 코드에 다음이 포함됩니다.
var requestData = {
className : 'Vocabulary',
method : 'getReport',
params : $('#report').val()
};
작동하지 않는 경우? 1 param 이상 보내야 할 때. 내가 call_user_func_array()를 사용하려고했지만 $ this-> 내부 객체와 함께 작동하지 않습니다. 메서드는 정적이어야합니다. 리플렉션을 사용하려고했지만 성공하지 못했습니다.
나는 도대체 어떻게하는지, 어떻게하는지 알지 : eval(); 하지만 이것은 eval보다 악합니다 :)) 코드는 다음과 같이 보입니다.
$params = array();
foreach ($_POST['params'] as $param){
if (is_string($param)){
$params[] = '"'.$param.'"';
}
else{
$params[] = $param;
}
}
$params = implode(',',$params);
$oClass = new $class;
eval ('$oClass->$_POST["method"]('.$params.')');
아무도 당신을 어떻게 해결합니까?
시도합니다. 문제의 원인이되는 코드 만 게시하십시오. PHP 또는 JS 디버거에서 가져온 출력 오류 메시지를 여기에 작성하십시오. "작동하지 않는다"는 말은 정보가 충분하지 않고 코드를 게시했음을 알고 있지만 많은 사람들이 자신이 수행하려고하는 것을 이해하지 못하는 것입니다. – Ozzy