我正在进行jQuery AJAX调用,我想将响应保存到变量中。但是,此变量没有AJAX调用函数之外的响应值。如何在AJAX调用函数之外得到响应?
示例:
var responseText = '';
$.ajax({
url: 'clients_handler.php',
type: 'post',
data: { action: 'check_email', email: email },
success: function(data) {
responseText = jQuery.parseJSON(data);
}
});
console.log(responseText);
因此,从我的示例responseText
将是空的,如AJAX函数之前设置的那样。
如何使用AJAX响应值设置此变量?
答案 0 :(得分:1)
您无法以您希望的方式保存变量,因为它位于闭包内。 您可以做的最好的事情是将响应数据传递给将在请求完成后执行的函数。这是一个例子:
//code
$.ajax({
url: 'clients_handler.php',
type: 'post',
data: { action: 'check_email', email: email },
success: function(data) {
responseHandler(data);
}
});
function responseHandler(data){
console.log(data);
}
答案 1 :(得分:1)
简单的答案是ajax异步触发。基本上这意味着您不知道ajax代码何时完成,因此调用$.ajax
之后的任何代码行可能会在$.ajax
完成之前执行(但不会一定)。这是为什么需要回调ajax。
一种解决方案是使用jQuery.ajax
选项async: false
使ajax请求同步,但这可能不是所希望的。
真正的解决方案是适当地使用回调 - 在responseText
函数中使用success:
完成所需的所有工作。
不喜欢在一个地方拥有所有代码吗? jQuery非常适合创建Deferred并且jqxhr
实现它:
var jqxhr = $.ajax({url: url, data: data});
//thousands of lines of code here
$.when(jqxhr).done(function (responseText) { console.log(responseText); });