jQuery加载文本文件数据

3
我正在尝试使用外部脚本文件中的$.get()函数从我的服务器加载文本文件中的数据。我的代码如下:

  /* 
   * 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);

当我在$.get()函数内部时,我可以看到stringData变量被填充得很好,并且调用alert确认它包含来自示例文本文件的数据。但是,当我走出$.get()函数时,stringData变量不再显示。我不知道这个函数如何工作,也不知道为什么它没有像我预期的那样工作。我的目的只是将文本数据加载到一个变量中,以便我可以处理它。感谢任何帮助。

2个回答

18

get是异步的,这意味着它会向服务器发出调用,并继续执行代码的其余部分。这就是为什么你需要回调函数的原因。无论您想要使用返回数据做什么,请在回调方法中完成(您已经在其中放置了alert的位置)。

get, post都是异步的。您可以通过以下方式进行同步调用:

  1. 在代码中的任何位置使用$.ajaxSetup({ async: false });。这将影响代码中的所有Ajax调用,请小心使用。

  2. 使用带有async: false$.ajax,如下所示。

查看下面的代码和上面提到的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);

这就是我注意到的,它只在函数内部设置它们。我会多了解一下的。谢谢你的提示,Lobo。 - kingrichard2005
@kingrichard2005 没关系。我刚刚添加了一些代码片段,可能会有所帮助。 - Praveen Lobo
我最终使用了这个。谢谢 :) - DigitalRayne

5

$.get函数是异步的。你需要在回调函数中处理返回的数据。你也可以将该函数移动到非内联位置以清理代码。

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

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

谢谢Joe,我按照你的建议将函数分离了。现在代码易读多了。 - kingrichard2005

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接