it-swarm.com.de

aufruf der PHP-Funktion mit Argumenten unter Verwendung von Jquery

Ich habe eine PHP-Datei func.php, in der ich viele Funktionen definiert habe, sagen wir:

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

Ich möchte den function func1 mit ajax aufrufen. Danke für deine Hilfe

15
Tarik Mokafih

Sie können eine PHP - Funktion nicht direkt aus einem AJAX - Aufruf aufrufen.

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

Du solltest dein PHP-Skript über eine Ajax-Anfrage aufrufen und dabei Jquery wie folgt verwenden:

Javascript:

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

Sie können Ihre Parameter über die Dateneigenschaft des Ajax-Objekts angeben.

Php

// you can do isset check before 
$param1 = $_GET['param1'];
$param2 = $_GET['param2'];

// validate // sanitize // save to db // blah blah // do something with params

Weitere Informationen erhalten Sie in der Funktionsbeschreibung von jQiery.ajax () unter http://api.jquery.com/jQuery.ajax/

7
Cristian Bitoi

Es ist etwas komplizierter, aber ich werde versuchen, es auf die Grundlagen zu reduzieren.

Sie benötigen eine Art Schnittstelle (grundsätzlich eine Konvention) zwischen dem Aufrufer und Ihrem Skript. Zwei sind hier die Hauptsorgen: 

  1. Wie Ihr Skript versteht, was mit welchen Argumenten aufgerufen werden muss. Angenommen, Sie entscheiden sich für eine GET-Anforderung zum Aufrufen einer Funktion. Der Funktionsname kann sich in einem func-Feld und die Argumente in einer args-Datei befinden, als Zeichenfolge, die durch ; getrennt ist. Mit anderen Worten, der Aufruf von funcFoo(5,'bar') würde durch Anfordern von func.php?func=func1&args=5;bar erfolgen.

  2. Die Art und Weise, in der der Anrufer den Rückgabewert empfängt (und versteht). Da Ihre Anforderungen js-orientiert sind, wäre ein JSON-Ansatz sehr geeignet.

Fügen Sie den folgenden Code zusammen mit Ihren Funktionen hinzu:

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

Ihre Funktionen sollten jedoch auch an die neuen Anforderungen angepasst werden. Da es keine Möglichkeit gibt zu sagen, wie viele Argumente der Aufrufer liefern wird, sollte eine Funktion so konzipiert sein, dass sie keine obligatorischen Argumente akzeptiert und nach den angegebenen Argumenten sucht. Außerdem sollte immer ein Array zurückgegeben werden, damit es json_encoded ist, bevor es an den Anrufer zurückgegeben wird.

Ihre Beispielfunktion sollte beispielsweise so aussehen:

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

Seien Sie sich jedoch bewusst : Dies ist nur ein Grundgerüst, um mit dem gesamten Konzept beginnen zu können. Sowohl für fehlertoleranz als auch für security ist noch viel mehr Vorsicht geboten. Aber das ist ein anderes Thema.

1
geomagas

Ja, du kannst !

hier mein code: 

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

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

und hier der Code in php, um zu erfahren, welche Funktion aufgerufen werden soll. 

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

}

Ich hoffe es hilft dir ...: D

0
navotera