2016-07-29 9 views
0

Ich habe eine Funktion, die eine andere Funktion verschachtelt ist, dass ein Klickereignis bindet an erneut ausgeführt, die mit einer anderen Ajax-URL-Funktion:jQuery: Aktualisierung global var und neu Lauffunktion

function getInternal() { 

     var callUrl = 'https://url.com'; // URL ON LOAD 

     $.ajax({ 
     dataType: "json", 
     url: callUrl, 

     success: function(data) { 

      var obj = data; 

      $(document).ready(function(callUrl) { 
      $("a.dept").click(function() { 
       var filterDept = $(this).attr('id'); 
       callUrl = 'https://url.com/' + filterDept; // URL TO UPDATE 
       getInternal(callUrl); // RUN THIS FUNCTION AGAIN 
      }); 
      }); 

Leider ist das Click-Ereignis fährt fort, die gleichen Daten zurückzugeben. Es sieht nicht so aus, als ob CallUrl aktualisiert wird.

Wie aktualisiere ich eine globale Variable innerhalb einer Funktion, um sie erneut auszuführen?

+2

Jedes Mal, wenn Sie 'getInternal()' aufrufen, werden Sie die Variable auf den ursprünglichen Neueinstellung. Deklarieren Sie die Variable außerhalb der Funktion. – sideroxylon

Antwort

0

Die erste Zeile Ihrer Funktion setzt Ihre Variable auf einen bestimmten Wert: var callUrl = 'https://url.com'; Jedes Mal, wenn Sie diese Funktion ausführen, wird die Variable daher auf 'https://url.com' gesetzt.

Wenn Sie Ihre Variable außerhalb der Funktion verschieben, wird sie zu einer globalen Variablen und der Teil Ihres Codes, der callUrl aktualisiert, bleibt bestehen.

Das heißt, Ihr Code ist alle Arten von vermischt. Sie haben $(document).ready() innerhalb eines AJAX-Rückrufs, ein click Ereignis, das innerhalb dieser bei jedem Aufruf neu definiert wird, scheint nichts geschlossen zu sein, und Sie haben einen Parameter für getInternal(); trotz der Tatsache, dass es keine erfüllt.

Ist etwas wie das, wonach Sie suchen?

$(document).ready(function() { 
 
    //On click of link, run AJAX call to changing URL (based on clicked link's ID) 
 
    $("a.dept").click(function() { 
 
       var filterDept = $(this).attr('id'); 
 
       var callUrl = 'https://url.com/' + filterDept; 
 
       getInternal(callUrl); 
 
    }); 
 
    }); 
 

 
function getInternal(callUrl) { 
 

 
     $.ajax({ 
 
     dataType: "json", 
 
     url: callUrl, 
 

 
     success: function(data) { 
 

 
      alert("Call made to " + callUrl); 
 
      
 
      } 
 
     
 
     }); 
 
    }

+0

Der Grund, warum ich es im Ajax-Erfolg verschachtelte, ist, dass der Onclick die Elemente nach dem Ajax-Aufruf aufnehmen muss. – beaconhill

+0

Es tut mir leid, ich verstehe immer noch nicht. Ein Click-Ereignis bei jedem erfolgreichen AJAX-Callback zu deklarieren erscheint in jedem Fall nicht praktikabel. Kannst du erklären, was dein Ziel ist und wie es sich von meinem obigen Code unterscheidet? – Santi

+0

Das Klickereignis funktioniert nicht, wenn es außerhalb des Rückrufs liegt, da das DOM nicht geladen wurde. Ich muss .ready() nach dem Ajax-Aufruf sein. – beaconhill

Verwandte Themen