ajax完成后获取变量
我有这个代码向我的服务器发出一些请求:
function myAjaxCheck(token) { $.ajax({ type: 'POST', url: 'auth.php', data: { token: token, }, dataType: 'json', success: function (data) { if (data.auth == 'OK') { alert ('ok'); } } else { alert('Error: ' + data.auth); } } }).done(function (data) { return data; }); }
所以,我需要将返回的数据传递给变量,如:
Var MyVariable = myAjaxCheck(token); console.log(MyVariable);
在控制台:
未定义
问题出在哪里,应该在完成后返回数据,但事实并非如此。
默认情况下, ajax()
请求是异步的,因此对ajax()
的调用通常会在请求完成之前返回。 您可以使用回调函数。
function myAjaxCheck(token, callback) { $.ajax({ type: 'POST', url: 'auth.php', data: { token: token, }, dataType: 'json', success: function (data) { if (data.auth == 'OK') { alert ('ok'); } } else { alert('Error: ' + data.auth); } callback(data); } }); } var myVariable; myAajxCheck(token, function(returnedData){ //anonymous callback function myVariable = returnedData; console.log(myVariable); });
如果你绝对必须,你可以在调用ajax()
使用async: false
。
请参阅等待$ .post完成 。
基本上,最好使用回调 。 您的变量似乎undefined
,因为将其返回到控制台的代码在AJAX请求完成之前执行 。
因为您希望立即返回一个值。 您正在使用异步XHR,因此,在XHR有机会完成并返回其值之前,该函数将返回(在本例中为undefined
)。