jQuery - 如何从POST检索变量?

时间:2014-07-28 10:54:05

标签: jquery json post

我有以下代码:

$.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);

我有一条错误消息,例如'variable sth is undefined'。 我做错了什么?

4 个答案:

答案 0 :(得分: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); });

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

调用.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);
};

答案 3 :(得分:0)

据我所知,你需要" sth"里面的变量总是?或者也许是在帖子本身之后?如果是这样,你可以这样做:

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

如果帖子在一个功能内部,你需要"某事物。要退回,你必须使用回调或承诺。