Javascript / jquery AJAX帖子WITH VARS函数返回undefined

时间:2016-07-26 21:40:38

标签: javascript jquery json ajax

我创建了这个同步Ajax函数来简单地发布数据:

function postme(id, tt) {
 tt['id'] = id;

 $.ajax({
   async:false, type: 'post', url: 'post.php', data: tt,
   success: function(response){ console.log(response);return response; }
 });
}

回复是:{"Info": "aoaaa"}

console.log(response);在控制台中提供JSON,但返回给出'undefined'。我试着这样称呼它:

postme('generate', {'1':'ee','w':'yy'});

我尝试了JSON解析,给函数一个名字,我尝试了我在网上找到的所有东西,但它只是不起作用。

我看过How do I return the response from an asynchronous call?但这对我来说似乎不起作用,因为函数不像我一样发送变量,在我的情况下它只会foo();postme(); 。我如何使用vars做到这一点?

编辑:我不需要使用异步,如果有更好的代码不使用它,我宁愿使用它。

3 个答案:

答案 0 :(得分:2)

首先,停止使用同步Ajax。这对于用户体验来说太可怕了,而且几乎不会被使用。

但是,如果您使用的是同步Ajax,则问题是postme()没有返回值。您正在success处理程序内返回,但这只是返回到ajax基础结构,而不是返回到postme()的调用者。相反,你可以这样做:

function postme(id, tt) {
    tt['id'] = id;
    var retVal;

    $.ajax({
        async: false,
        type: 'post',
        url: 'post.php',
        data: tt,
        success: function (response) {
            console.log(response);
            retVal = response;
        }
    });
    return retVal;
}

你真正应该做的是使用这样的异步ajax:

function postme(id, tt) {
    tt['id'] = id;

    return $.ajax({
        async: true,
        type: 'post',
        url: 'post.php',
        data: tt
    });
}

postme(...).then(function(response) {
    // process response here
}, function (err) {
    // handle error here
});

答案 1 :(得分:1)

我同意应该避免使用同步AJAX,但如果你必须这样做,那么:

function postme(id, tt) {
 var r = null;
 tt['id'] = id;

 $.ajax({
   async:false, type: 'post', url: 'post.php', data: tt,
   success: function(response){ console.log(response);r =response; }
 });

 return r;
}

答案 2 :(得分:0)

假设在某些函数中使用了返回值,例如:

function foo(response) { /* some code */}

然后提供foo作为回调。

function postme(id, tt, callback) {
 tt['id'] = id;

 $.ajax({
   type: 'post', url: 'post.php', data: tt,
   success: callback
 });
}

并将函数'postme'称为:

postme(param1, param2, foo)