post abfrage als Funktion nutzen - jQuery

baeri

Erfahrenes Mitglied
Hi,
ich will eine post Abfrage als Funktion nutzen... jetzt ist ja die Abfrage in sich irgendwie verschlossen! kann ich da auch ausbrechen?

Code:
        var getDAT = function( material ) {
            $.post( "getdat.php", { getMaterial:material }, function( data ) {
        
                data = $.parseJSON( data )
            
            
                return data
        
        
            })
    
        }
    
        console.log( getDAT('156116191') )

ohne Funktion innerhalb vom Post funktioniert das... aber wie bekomme ich da daten raus?

ich will einfach in meinen Script... und das an mehreren punkten eine Daten abrufen!
z.B. getDAT('123465')[0]

Vielen Dank für jede Hilfe
 
Ich bin mir nicht sicher, ob ich richtig verstehe was du genau willst, aber mit POST kannst du Daten austauschen aber keinen Funktionsaufruf erzeugen. Aber dein PHP Skript getdat.php kann ja je nach übergebenen Werten verschiedene Funktionen ausführen.
PHP:
<?php
if(isset($_POST['Methode'])){
  $method=$_POST['Methode'];
}
  switch ($method){
    case 'data':
      //Hier steht die Datafunktion
     $Ergebnis=1+1;
    echo ($Ergebnis);
    ;break;

    case 'info':
       //Eine andere Funktion 
      $Ergebnis=2+4;
      echo($Ergebnis)
      ;break;

    default:
      // Funktion die aufgerufen wird wenn Methode nicht spezifiert ist
     $Ergebnis=3*3
     echo($Ergebnis)
    ;break;
   }
Dein POST Daten müssen dann halt getMaterial=material und Methode=data beinhalten.
 
öhhhhh ich hol mir zwar die daten aus ner PHP Datei... aber die Daten will ich in Javascript nutzen!
in dem Fall geht es darum, das ich mir zu ner passenden Nummer einen Text hole!
mit
$(irgendein htmlobjekt).text( "123456789 => " + getDAT('123456789') )
will ich meinen Abruf ausgeben!
-> notfalls muss ich mein objekt mit übergeben und direkt von der Funktion bearbeiten lassen, aber das ist nicht der "schönere" weg den ich mir vorstelle...

WICHTIG... ich wills in Javascript mit jQuery lösen!
 
Ja, das habe ich verstanden. Wenn du dir mein PHP anguckst, da steht ein echo drin. Das ist das, was php zurück gibt und jquery in data speichert.
 
ja nochmal...
meine daten kommen doch auch zurück! das ist doch nicht mein Problem...
aber ich will meine daten
$.post( "getdat.php", { getMaterial:material }, function( data ) {

nicht HIER NUTZEN

})

sondern HIER!
 
das wäre schön...
aber bei POST ist das irgendwie anders...
vermutlich brauch ich da auch einen "anderen" befehl...
aber ich kann weder ein return noch eine definierte variable daraus nutzen...
hier ein beispiel:
http://jsfiddle.net/baer777/cgvstyv1/
dbug1 wird befüllt! alles richtig alles okay
dbug2 wird nicht befüllt
2. beispiel:
http://jsfiddle.net/baer777/m1pgnxzg/
dbug1 wird befüllt! alles richtig alles okay
dbug2 wird nicht befüllt
=> wie kann ich das "umgehen"?
 
Hallo baeri,

dein zweiter Code sieht so aus:
Javascript:
test2 = function () {
    $.post("http://echo.jsontest.com/test/123456", {
        data: '123'
    }, function (data) {
        return JSON.stringify(data);
    });
}
(Am Rande: Das 'var' vor test2 fehlt. Anstatt einer lokalen Variable deklarierst du im obigen Code eine globale Variable. Davon würde ich abraten.,
am Rande II: Dein aktueller Code ruft jQuery#text2 anstatt jQuery#text auf. Der Code sollte so ausschauen: http://jsfiddle.net/g4wthwcj/ - er funktioniert jedoch immer noch nicht, siehe hierzu den Rest des Beitrags)

Das Return-Statement befindet sich in einer anonymen Funktion function (data) {...}. Das, was du zurückgibst, wird folglich an den Code zurückgegeben, der diese anonyme Funktion aufruft. Dies ist irgendeine interne Funktion von jQuery.
Der Punkt ist, dass sich das 'return' nicht auf die Funktion test2 bezieht!

Ein weiterer Aspekt ist die Asynchronität. Jede AJAX-Abfrage ist asynchron, sofern du nichts anderes spezifizierst beim XMLHttpRequest-Objekt, d. h. wäre ein "übergreifendes" Return (so wie du es im obigen Code ausdrücken wolltest) möglich, so müsste der aufrufende Code auch warten, bis die AJAX-Abfrage ausgeführt wurde.

Die Lösung besteht in Callback-Methoden. Siehe folgenden Code:
Javascript:
var test = function () {
    return "blah";
};

var test2 = function (callback) {
    $.post("http://echo.jsontest.com/test/123456", {
        data: '123'
    }, function (data) {
        callback(JSON.stringify(data));
    });
};

$("#dbug1").text(test())
test2(function (value) {
    $("#dbug2").text(value);
});
jsFiddle

Wir rufen die Funktion test2 auf und übergeben eine Funktion. Diese Funktion übernimmt einen Parameter "value" und schreibt ihn, wenn diese Funktion aufgerufen wird, in "#dbug2".
Die Funktion test2 selbst führt die AJAX-Abfrage aus. Ist diese fertig, dann wird die an $.post übergebene Callback-Funktion aufgerufen (function (data) { ... }). Diese wiederum ruft unsere übergebene Callback-Funktion mit dem veränderten data-Wert auf.

Das erst einmal als Einstieg ins Thema.
Hast du dies verstanden, könntest du dir mal Promises anschauen. Diese basieren auch auf Callbacks, verschönern aber den Code ganz grob gesagt.
 

Neue Beiträge

Zurück