2016-07-29 78 views
0

我有了另一個函數嵌套函數結合click事件重新運行與不同的AJAX URL功能:jQuery的:更新全局變量並重新運行功能

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

不幸的是,點擊事件繼續返回相同的數據。它看起來不像callUrl正在更新。

如何更新函數內的全局變量以重新運行?

+2

每次通話時間'getInternal()',你重新設置變量原。在函數外部聲明變量。 – sideroxylon

回答

0

函數的第一行將變量設置爲特定值:var callUrl = 'https://url.com';因此,每次運行此函數時,該變量都將設置爲'https://url.com'

通過在函數外部移動變量,它將成爲全局變量,並且更新callUrl的代碼部分將會持續。

這就是說,你的代碼是各種各樣的混合起來。您有一個AJAX回調中的$(document).ready(),每次調用都會重新定義一個click事件,似乎沒有任何事件會被關閉,並且您爲getInternal();提供了一個參數,儘管事實上它沒有。

是這樣的,你在追求什麼?

$(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

我在ajax成功中嵌套它的原因是onclick需要在ajax調用之後拾取元素。 – beaconhill

+0

對不起,我還沒有理解。在每種成功的AJAX回調中聲明一個click事件在任何情況下都不太實際。你能解釋一下你的目標是什麼以及它與我的代碼有什麼不同? – Santi

+0

由於DOM尚未加載,因此它在回調之外時不起作用。我需要.ready()在Ajax調用之後。 – beaconhill