【问题标题】:Store data from get Request从获取请求中存储数据
【发布时间】:2016-02-08 23:57:05
【问题描述】:

假设我正在使用 Jquery 执行发布请求:

var information;

$.post( url, function( data ) {
  information = data;
});

console.log(information);//This is undefined! Why?

为什么信息变量是未定义的?即使在发布请求结束后,我应该怎么做才能让它存储数据?

【问题讨论】:

  • 您检查过data 不是undefined 吗?
  • @Quannt 是的,数据确实有价值
  • post 请求没有“结束”,Ajax 是异步的。这就是为什么它有回调函数,当它结束时执行。

标签: javascript jquery http post server


【解决方案1】:

$.post 是异步的,所以你必须使用 $.ajaxSetup({async:false});在它之前得到你期望的结果。

基本上发生的事情是您的 console.log 在 $.post 回调可以将数据保存到变量之前运行,因此出现未定义的错误。

【讨论】:

    【解决方案2】:

    您必须从适当的回调中获取它。 $.post() 是异步的。这是一个例子:

    // Get some values from elements on the page:
    var $form = $( this ),
      term = $form.find( "input[name='s']" ).val(),
      url = $form.attr( "action" );
    
    // Send the data using post
    var posting = $.post( url, { s: term } );
    
    // Put the results in a div
    posting.done(function( data ) {
      var content = $( data ).find( "#content" );
      $( "#result" ).empty().append( content );
    });
    

    来自这里的 jQuery 文档:http://api.jquery.com/jquery.post/

    另外,我不推荐 Dontfeedthecode 的建议。同步模式不应该在 javascript 中使用,因为它会产生意想不到的效果,例如锁定用户界面的某些部分。对于测试或特定情况可能没问题,但我认为我应该提及此免责声明。

    【讨论】:

      【解决方案3】:

      $.post 是一个异步函数,因此在您调用console.log(information); 时,信息变量仍为空,因此您应该仅在 $.post 函数内使用数据或使用回调函数。

      var information;
      
      $.post( url, function( data ) {
        workDone(data);
      });
      function workDone(data){
           information = data;
           console.log(information);
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-04-27
        • 2020-04-30
        • 2021-03-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多