2011-06-14 48 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