У меня есть php файл func.php
, где я определил многие функции, скажем:
<? php
function func1($data){
return $data+1;
}
?>
Я хочу вызвать function func1
, используя ajax. спасибо за вашу помощь
У меня есть php файл func.php
, где я определил многие функции, скажем:
<? php
function func1($data){
return $data+1;
}
?>
Я хочу вызвать function func1
, используя ajax. спасибо за вашу помощь
Вы не можете вызвать функцию PHP непосредственно из вызова AJAX, но вы можете сделать это:
PHP:
<? php
function func1($data){
return $data+1;
}
if (isset($_POST['callFunc1'])) {
echo func1($_POST['callFunc1']);
}
?>
JS:
$.ajax({
url: 'myFunctions.php',
type: 'post',
data: { "callFunc1": "1"},
success: function(response) { alert(response); }
});
Вы должны вызвать свой php-скрипт через ajax-запрос, используя jQuery, например:
Javascript:
$.ajax({
url: "script.php",
data: { param1: "value1", param2: "value2" },
type: "GET",
context: document.body
}).done(function() {
// your code goes here
});
Вы можете передать свои параметры через свойство data объекта ajax.
Php
// you can do isset check before
$param1 = $_GET['param1'];
$param2 = $_GET['param2'];
// validate // sanitize // save to db // blah blah // do something with params
Дополнительную информацию вы можете получить из описания функции jQuery.ajax() по адресу http://api.jquery.com/jQuery.ajax/
Это немного сложнее, но я постараюсь свести его к основам.
Вам потребуется какой-то интерфейс (соглашение, в основном) между вызывающим и вашим script. Вот две основные проблемы:
Как ваш script понимает, что нужно вызывать и с какими аргументами. Скажем, вы решили использовать запрос GET
для вызова функции. Имя функции может быть в поле func
и аргументах в args
one, в качестве строки, разделенной символом ;
. Другими словами, вызов funcFoo(5,'bar')
будет выполняться путем запроса func.php?func=func1&args=5;bar
.
Способ, которым вызывающий абонент получает (и понимает) возвращаемое значение. Поскольку ваши требования js-ориентированы, подход JSON будет очень уместным.
Добавьте следующий код вместе с вашими функциями:
if(isset($_GET['func']))
{
$func=$_GET['func'];
if(function_exists($func))
{
$args=(isset($_GET['args'])?explode(';',$_GET['args']):array());
$result=call_user_func_array($func,$args);
}
else
$result=array('error'=>"Unknown Function $func!");
}
else
$result=array('error'=>"No function name provided!");
echo json_encode($result);
Однако ваши функции также должны быть изменены в соответствии с новыми требованиями. Поскольку нет способа сообщить, сколько аргументов будет подано вызывающим, функция должна быть сконструирована так, чтобы не принимать никаких обязательных аргументов и проверять сами поставляемые. Кроме того, он должен всегда возвращать массив, чтобы быть json_encode
d, прежде чем он будет возвращен вызывающему.
Например, ваша примерная функция должна выглядеть примерно так:
function func1(){
$data=func_get_args();
if(count($data)) // at least one -- rest will be ignored
return $data[0]+1;
else
return array('error'=>__FUNCTION__."() expects an argument!");
}
Имейте в виду, хотя. Это всего лишь скелет, чтобы вы начали со всей концепции. Необходимо уделять больше внимания как отказоустойчивости, так и безопасности. Но это еще одна тема.
Да, ты можешь !
вот мой код:
$.ajax({
type: "POST",
url: "ajax.php",
data: { kode: $(this).val(), func: 'my_func' },
success: function(response) {
//any success method here
}
});
а вот код в php чтобы получить какую функцию вызывать.
$post = (object) $_POST;
if(!$post)
return false;
$func = $post->func;
return $func($post);
function my_func($post) {
$json['any_data'] = false;
if($post->kode == 'ND'){
$json['any_data'] = 'ND-'.date('Y');
}
echo json_encode($json);
}
Надеюсь, это поможет вам, братан...: D