Pit: Geltungsbereich Variable Javascript

Hallo,

ich habe eine Jquery Funktion und kann im Success-Fall nicht auf meine Variable zugreifen.

Wie umgeht man so ein Problem?

$.post('script.php', { id: id }, function (data) {
var array_data = data.split("|");
console.log(array_data[1]);
 }, 'json')
	.complete(function () {
      ...
      })
      .success(function () {
      // Hier bräucht ich array_data[0] :-(

      })
      .error(function () {
      ...
});

Pit

  1. Servus Pit,

    du moppelst doppelt. Die post-Methode von jQuery erlaubt als dritten optionalen Parameter ein Callback, der bei Erfolg ausgeführt wird (=success). Gleichzeitig gibt die post-Methode ein Promise zurück, auf das du mit success() das gleiche Callback binden kannst.

    Nutze also entweder den ersten oder den zweiten Weg. Mit console.log(arguments) kannst du innerhalb von Funktionen die übergebenen Parameter der Funktion in der Konsole loggen.

    var promise = $.post('script.php', { id: id }, function (data) {
        // success-callback
        var array_data = data.split("|");
        console.log(array_data[1]);
        }, 'json');
    
    
    // alternativer success-callback
    promise.success(function () {
          console.log(arguments); // sollte die gleichen Parameter wie oben enthalten
    });
    
    
    

    ciao

    --
    "Sir, we are surrounded" - "Excellent, we can attack in any direction!"
  2. Hallo,

    schon gefunden…

    $.post('script.php', { id: id }, function (data) {
    var array_data = data.split("|");
    console.log(array_data[1]);
     }, 'json')
    	.complete(function () {
          ...
          })
          .success(function (data) {
          // So geht es also 😀
    
          })
          .error(function () {
          ...
    });
    

    Pit

    1. Hallo Pit,

      den Callback brauchst Du aber trotzdem nicht. Du kannst auch im complete-Handler loggen.

      Bitte beachte, dass jQuery keine Promises liefert, sondern den eingebauten Helper Deferred. Der verhält sich im Wesentlichen wie ein Promise. Lies Dir die Beschreibung von $.post auf api.jquery.com durch!

      Die Methoden success, error und complete entsprechen dem ursprünglichen Deferred-System, aber jQuery lehnt in neueren Versionen mehr an Promises an. Darum gelten die von Dir verwendeten Methoden als missbilligt und sind in jQuery 3 nicht mehr vorhanden.

      Statt dessen gibt es bereits seit jQuery 1.5 die Methoden done, fail und always, seit 1.8 werden aber auch die Standardmethoden von Promises unterstützt: then und catch. Die finally-Methode der Promises fehlt (die ist relativ neu) und kommt vielleicht noch irgendwann.

      Ich find's ja oberblöd, dass jQuery immer noch Deferred verwendet und keine nativen Promises einsetzt, aber vermutlich gibt's da irgendeinen Kompatibilitätszopf den sie nicht abschneiden wollen oder können. Immerhin musst Du Dir keinen Kopf um Fetch-Polyfills machen, wenn Du bei jQuery bleibst 😉. Aber vielleicht schaust Du Dir das Fetch-API ja mal an.

      Rolf

      --
      sumpsi - posui - clusi