【问题标题】:jQuery - how to retrieve variable from POST?jQuery - 如何从 POST 中检索变量?
【发布时间】:2014-07-28 10:54:05
【问题描述】:

我有以下代码:

$.post( '/map/getfile' ,data)
    .done(function(dataR) {
        var obj = jQuery.parseJSON(dataR);
        var sth = obj.number;
        })
    .always(function() {
        })
    .fail(function() {
        alert( "error" );
    alert( "finished" );
        });

我需要'sth'变量在代码中的更远位置,但是当我尝试时

console.log(sth);

我收到一条错误消息,例如“变量……未定义”。 我做错了什么?

【问题讨论】:

  • sth 在您的 done 回调中定义,因此将是本地的。听起来您正试图在该范围之外访问它。

标签: jquery json post


【解决方案1】:

调用函数并传入sth

$.post( '/map/getfile' ,data)
    .done(function(dataR) {
        var obj = jQuery.parseJSON(dataR);
        var sth = obj.number;
        callback(sth);  // callback function that needs the sth variable
        })
    .always(function() {
        })
    .fail(function() {
        alert( "error" );
    alert( "finished" );
        });

通常你会将帖子包装在一个函数中,并将回调函数作为参数传入,以便轻松更改:

 function getFilePost(callback) {
      // above post code
 }

 getFilePost(function(sth) { console.log(sth); });

【讨论】:

    【解决方案2】:

    您必须在需要它的范围内或更高的范围内声明变量sth,并在done 回调中设置值。但是,由于这是一个 ajax 调用,因此在请求完成之前,您不会在 ajax 调用之外立即获得该值。

    这应该可以帮助您相应地规划您的代码。

    【讨论】:

      【解决方案3】:

      .done() 中调用一个函数来处理您的结果。

      $.post( '/map/getfile' ,data)
          .done(function(dataR) {
              var obj = jQuery.parseJSON(dataR);
              displayResults(obj.number);
              })
          .always(function() {
              })
          .fail(function() {
              alert( "error" );
          alert( "finished" );
              });
      
      var displayResults = function(sth) {
          alert(sth);
      };
      

      【讨论】:

      • console.log 会立即触发,并且不会显示任何我猜测的内容。
      • 哦,对不起 - 你是对的。但是一旦发布完成,变量就会被定义
      【解决方案4】:

      据我了解,您总是需要内部的“某物”变量吗?或者也许在帖子本身之后?如果是这样,您可以这样做:

      var sth;
      $.post( '/map/getfile' ,data)
        .done(function(dataR) {
          var obj = jQuery.parseJSON(dataR);
          sth = obj.number;
          callback(sth);  // callback function that needs the sth variable
          })
        .always(function() {
          console.log(sth); // I expect "always" to be called by jQuery after "done"  
        })
        .fail(function() {
          alert( "error" );
          alert( "finished" );
        });
      console.log(sth);
      

      如果帖子在函数内,并且您需要返回“某事”,则必须使用回调或承诺。

      【讨论】:

        猜你喜欢
        • 2012-01-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-28
        • 1970-01-01
        相关资源
        最近更新 更多