2013-03-01 59 views
0
var desc; 
    $.ajax({ 
     url: "data/step2.xml", 
     dataType: "xml", 
     success: function(data){ 
      $(data).find('date').each(function(){ 
       var day = $(this).find('day').text(); 
       var date = $("#txtDate").datepicker("getDate"); 
       date = (date.getDate()+"-"+date.getMonth()+1+"-"+date.getFullYear()); 
       if (day==date){ 
        $(this).find('availability').each(function(){ 
         var prod = $(this).find('product').text(); 
         var time = $(this).find('starttime').text(); 
         if (prod==label){ 
          desc="!"; 
         } 
        }); 
       } 
      }); 
     } 
    }); 

我遇到一些問題訪問desc變量...我想操縱它的價值,你可以在desc="!"看到,但它返回undefined。沒有任何方法可以讓全局變量或其他東西?或者其他方式來訪問它? ... 哦,所有這些代碼都在一個函數中。的Javascript「全局」變量問題

+1

$ .ajax默認爲異步。看起來你正試圖在ajax調用完成之前訪問'desc'。 – techfoobar 2013-03-01 18:21:59

+0

首先你確定你的代碼運行到'desc =「!」'? – Ulflander 2013-03-01 18:24:03

+0

你說「所有的代碼都在一個函數裏面......」*哪個*函數?它是否都在「成功」功能之內? – 2013-03-01 18:24:50

回答

2

在這種特殊情況下,問題不是desc變量的範圍。您在success回調中操作的desc變量與在ajax調用之前聲明的變量相同。

這裏的問題是時間。方法success不會在執行ajax調用的同時執行。它在ajax調用完成後稍後執行。只有在此時刻,纔會將值寫入desc。它處理desc值的代碼都必須從那裏desc值設置

if (prod == labe) { 
    desc = "!"; 
    onDescChanged(); 
} 
+0

哦,明白了。謝謝!我會嘗試別的:) – zettca 2013-03-01 18:31:21

0

點叫我假設你的代碼嘗試這樣的:

function foo() { 
    var desc; 
    $.ajax({ 
     .... 
     success: function() { 
      ... 
      desc = "!"; 
     } 
    }); 
    return desc; // this will return undefined, as success() hasn't completed 
} 

爲了解決這個問題,可以使用一個回調函數就像JaredPar的回答一樣。