我创建了这个同步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做到这一点?
编辑:我不需要使用异步,如果有更好的代码不使用它,我宁愿使用它。
答案 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)