2011-06-14 89 views
2

我想從我的服務器上的文本文件加載數據使用外部腳本文件中的$ .get()函數。我的代碼如下:jQuery加載文本文件數據

/* 
    * Load sample date 
    */ 
    var stringData; 
    $.get("http://localhost/webpath/graphing/sample_data.txt", function(data){ 
     stringData = data; 
     //alert("Data Loaded: " + stringData); 
     }); 
    //Split values of string data 
    var stringArray = stringData.split(","); 
    alert("Data Loaded: " + stringData); 

當我的$獲得()函數中,我可以看到StringData是VAR得到peopulated就好了,並提醒電話確認它包含示例文本文件中的數據。但是,當我獲得$ .get()函數之外時,stringData變量不再顯示。我不太瞭解該功能是如何工作的,以便知道它爲什麼不按我預期的那樣工作。我希望它所做的就是將文本數據加載到變量中,以便我可以使用它。任何幫助表示讚賞。

回答

14

get是異步的,它會調用服務器並繼續執行其餘的代碼。這就是爲什麼你有回調方法。無論您打算如何處理返回數據,都要在回調方法(您已放置警報的位置)內進行。

get,post都是異步的。您可以通過使用

  1. 使用$.ajaxSetup({ async: false });在您的代碼中的任何位置。這會影響代碼中的所有ajax調用,所以要小心。

  2. $.ajaxasync: false例如,如下所示。

看看下面的代碼和上面提到的API文檔鏈接來解決您的問題。

/* 
    * Load sample date 
    */ 
    var stringData = $.ajax({ 
        url: "http://localhost/webpath/graphing/sample_data.txt", 
        async: false 
       }).responseText; 

    //Split values of string data 
    var stringArray = stringData.split(","); 
    alert("Data Loaded: " + stringData); 
+0

這就是我注意到的,它只是將它們設置在函數內。我會讀更多關於它。感謝提示Lobo。 – kingrichard2005 2011-06-14 03:56:50

+0

@ kingrichard2005不客氣。我只是添加了一些可能有所幫助的代碼片段。 – Lobo 2011-06-14 03:59:19

+0

真棒,這幫助了我很多。 – CyanPrime 2012-06-27 02:16:22

5

$ .get函數是異步的。您需要對回調函數中返回的數據做任何工作。您可以將該功能移至不內聯以清理代碼。

function parseData(data){ 
     //do something with the data 
     alert("data is: " + data); 
    } 

    $.get("http://localhost/webpath/graphing/sample_data.txt",parseData); 
+0

感謝喬,我繼續按照你的建議分開了這個功能。更容易閱讀。 – kingrichard2005 2011-06-14 04:16:06