将jQuery.get()分配给变量?

时间:2009-08-07 12:05:26

标签: ajax jquery callback

从jQuery.get()获取响应的正确方法是什么?

var data = jQuery.get("output.csv");

我在读jQuery.get()必须有一个回调函数?这是为什么?以及如何使用此回调函数将响应分配回数据变量?

提前感谢您的帮助和澄清。

更新

谢谢大家的答案和解释。我想我开始最终掌握你们所说的话了。 我的下面的代码只是在它的第一次迭代中做正确的事情。 其余的迭代它写入页面未定义。 我错过了什么吗?

<tbody>
<table id="myTable"> 

    <script type="text/javascript">

        $.get('output.csv', function(data) {
                csvFile = jQuery.csv()(data);

                for ( var x = 0; x < csvFile.length; x++ ) {
                    str = "<tr>";
                    for ( var y = 0; y < csvFile.length; y++) {
                        str += "<td>" + csvFile[y][y] + "</td>";
                    }
                    str += "</tr>";
                }
                $('#myTable').append(str);


        });

    </script>

</tbody>
</table>

5 个答案:

答案 0 :(得分:8)

异步函数调用需要回调函数,例如AJAX GET请求。调用get函数和获取响应之间存在延迟,这可能是毫秒或几分钟,因此您需要有一个在异步GET完成其工作时调用的回调函数。 p>

以下是有关jQuery的AJAX get函数的更多信息:http://docs.jquery.com/Ajax/jQuery.get#urldatacallbacktype

来自jQuery的例子:

// this would call the get function and just 
// move on, doing nothing with the results
$.get("test.php");

// this would return the results of the get
$.get("test.php", function(data){
  alert("Data Loaded: " + data);
});

如果在尝试使用回调函数中的undefined变量时获得data,请在Firefox中的Firebug中打开控制台并观看get请求。您可以看到原始请求及其返回的响应。在看到发送到服务器的内容以及发送回客户端的内容后,您应该更好地了解问题。

答案 1 :(得分:4)

我真的很难在事件的“document.ready”阶段将jQuery ajax的结果存入我的变量。

当用户在页面加载后触发选择框的“onchange”事件时,jQuery的ajax会加载到我的变量中,但是当页面首次加载时,数据不会提供变量。

我尝试了很多很多不同的方法,但最后,我需要的答案是在这个stackoverflow页面上:JQuery - Storing ajax response into global variable

感谢撰稿人Charles Guilbert,我能够将数据输入到我的变量中,即使我的页面首次加载也是如此。

以下是工作脚本的示例:

    jQuery.extend
    (
       {
          getValues: function(url) 
          {
              var result = null;
              $.ajax(
              {
                url: url,
                type: 'get',
                dataType: 'html',
                async: false,
                cache: false,
                success: function(data) 
                {
                    result = data;
                }
              });
          return result;
          }
       }
    );

// Option List 1, when "Cats" is selected elsewhere
optList1_Cats += $.getValues("/MyData.aspx?iListNum=1&sVal=cats");

// Option List 1, when "Dogs" is selected elsewhere
optList1_Dogs += $.getValues("/MyData.aspx?iListNum=1&sVal=dogs");

// Option List 2, when "Cats" is selected elsewhere
optList2_Cats += $.getValues("/MyData.aspx?iListNum=2&sVal=cats");

// Option List 2, when "Dogs" is selected elsewhere
optList2_Dogs += $.getValues("/MyData.aspx?iListNum=2&sVal=dogs");

答案 2 :(得分:3)

实际上,在您的示例中,数据将是XMLHttpRequest请求对象。

var x;
$.get( 'output.csv', function(data){
    x = data;
    console.log(x); // will give you the contents.
});

答案 3 :(得分:3)

tsvanharen很好地回答了这个问题,但是DCrawmer仍然忽略了这一点。让我试着为他澄清一下。我过于简化了一些,并对一些细节进行了平滑。

查看下面显示的代码。这与tsvanharen的代码几乎相同,除了我用实际的函数指针替换了回调的匿名函数,并且更明确一点,所以你可以看到发生了什么:

var x = null;

function myCallback(data)
{
   alert("Data Loaded:" + data);
}

$.get("test.php", myCallback);

// the rest of your code
alert("The value of X is: " + x);

假设test.php加载了一两个小时,请注意警报可能出现的顺序:

1. "The value of X is"
2. "Data Loaded"

函数$.get()即时运行。 JavaScript继续运行并立即运行其余代码。在后台,它正在test.php检索您的页面。 jQuery隐藏了一些混乱的细节。

回调函数($.get()的第二个参数)稍后运行(异步)。或者,换句话说,函数myCallback是事件的处理程序。该事件是“$.get()已完成检索数据”。直到那时它才会运行。 $.get()运行时它不会运行! $.get()只会记住该功能的用途。

函数myCallback可能会在处理$.get()很久之后的几毫秒或几分钟后运行。

如果myCallback在几分钟之后才运行,那么当运行“X值”代码时,x的值是多少?它仍然是null有你的错误

要使用从脚本中的页面检索的数据,您必须执行以下操作:

  1. 启动脚本,声明变量以保存数据。
  2. 使用回调函数调用$.get()来处理返回。
  3. 别无其他。 [或者,至少,没有任何需要数据]   让页面就在那里。

    ...将来的某个时候......

    X。您的回调函数将运行,并具有您的网页结果。   你的回调函数可以:     *显示数据     *将该数据分配给变量     *调用其他功能     *顺其自然。

答案 4 :(得分:1)

您只需要在参数中指定回调函数来获取方法。您的数据将在您在函数中指定的变量中。

$.get("output.csv", function(data) {
    // Put your function code here, the 'data' variable will hold your data.
});