【问题标题】:Assign jQuery.get() to a variable?将 jQuery.get() 分配给变量?
【发布时间】:2010-11-17 16:18:35
【问题描述】:

将来自 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>

【问题讨论】:

    标签: ajax jquery callback


    【解决方案1】:

    在事件的“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】:

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

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

      【讨论】:

      • 鉴于(据我所知)get 是异步的,log 不是每次都打印undefined 吗?
      • 是的,这段代码每次都给我未定义,我该如何防止?
      • 把console.log()调用放在回调里面!
      • @pixeline 是对的。如果调用时间过长,则回调中的日志更好
      【解决方案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。您的回调函数将运行,并具有您的网页的结果。 您的回调函数可以: * 显示数据 * 将该数据分配给一个变量 * 调用其他函数 * 一路走好。

      【讨论】:

      • 非常感谢您的澄清。请查看我对问题的更新并告诉我我做错了什么?谢谢你的帮助。
      • 分而治之。确保 jQuery.get 实际上返回了您认为的数据。在函数的开头放置一个 alert(data) 以确保从 output.csv 中正确读取数据。 (这不是一个格式正确的 url,你确定这是你想要的吗?)从那里继续。
      【解决方案4】:

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

      这里有更多关于 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);
      });
      

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

      【讨论】:

      • 我已经更新了我的答案,提供了一个帮助解决未定义数据变量问题的提示。
      • @DCrawmer 检查pixeline 在说什么。如果获取请求的解析占用太多,最好在回调中获取数据。实际上这是正确的方法。
      【解决方案5】:

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

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

      【讨论】:

        猜你喜欢
        • 2014-05-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多