web-dev-qa-db-fra.com

appelez la fonction php avec des arguments en utilisant Jquery

J'ai un fichier php func.php où j'ai défini de nombreuses fonctions, disons:

<? php 
function func1($data){
return $data+1;
}
?>

Je veux appeler le function func1 en utilisant ajax . Merci de votre aide

15
Tarik Mokafih

Vous ne pouvez pas appeler une fonction PHP directement à partir d'un appel AJAX, mais vous pouvez le faire:

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); }
});
34
Steve

Vous devriez appeler votre script php via une requête ajax, en utilisant jquery comme:

Javascript:

$.ajax({
  url: "script.php",
  data: { param1: "value1", param2: "value2" },
  type: "GET",
  context: document.body
}).done(function() {
  // your code goes here
});

Vous pouvez donner vos paramètres via la propriété data de l’objet 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

Plus d'informations que vous pourriez obtenir à partir de la description de la fonction jQiery.ajax () dans http://api.jquery.com/jQuery.ajax/

7
Cristian Bitoi

C'est un peu plus compliqué, mais je vais essayer de le réduire à l'essentiel.

Vous aurez besoin d'une sorte d'interface (une convention, en gros) entre l'appelant et votre script. Deux sont les principales préoccupations ici: 

  1. La façon dont votre script comprend ce qui doit être appelé et avec quels arguments. Supposons que vous décidiez d'utiliser une requête GET pour appeler une fonction. Le nom de la fonction peut être dans un champ func et les arguments dans un args, sous forme de chaîne séparée par ;. En d'autres termes, appeler funcFoo(5,'bar') se ferait en demandant func.php?func=func1&args=5;bar.

  2. La manière dont l'appelant reçoit (et comprend) la valeur de retour. Étant donné que vos exigences sont orientées js, une approche JSON serait hautement appropriée.

Ajoutez le code suivant avec vos fonctions:

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);

Cependant, vos fonctions doivent également être modifiées pour répondre aux nouvelles exigences. Puisqu'il n'y a aucun moyen de dire combien d'arguments l'appelant fournira, une fonction doit être conçue pour n'accepter aucun argument obligatoire et rechercher les arguments fournis eux-mêmes. En outre, il devrait toujours renvoyer un tableau afin d'être json_encoded avant de le renvoyer à l'appelant.

Votre exemple de fonction, par exemple, devrait ressembler à ceci:

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!");
}

Soyez conscient cependant : Ceci est juste un squelette pour vous aider à démarrer avec le concept entier. Il faut faire beaucoup plus attention à la fois tolérance de pannes et sécurité. Mais c'est un autre sujet.

1
geomagas

Oui, vous pouvez !

voici mon code: 

     $.ajax({
        type: "POST",
        url: "ajax.php",
        data: { kode: $(this).val(), func: 'my_func' },

        success: function(response) {
            //any success method here
        }
    });

et voici le code en php pour recevoir quelle fonction appeler. 

$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);

}

J'espère que ça vous aidera ...: D

0
navotera