我正在执行一个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响应值设置此变量?
发布于 2013-01-10 14:51:51
简单的答案是ajax异步触发。从本质上说,这意味着您不知道ajax代码何时完成,因此调用$.ajax之后的任何代码行都可以在$.ajax完成之前执行(但不一定)。这就是为什么ajax的回调是必要的。
一种解决方案是使用jQuery.ajax选项async: false使ajax请求同步,但这可能不是所需要的。
真正的解决方案是适当地使用回调--在responseText函数中完成所有需要使用success:的工作。
不喜欢把所有的代码放在一个地方?jQuery非常好,可以创建延迟并让jqxhr实现它:
var jqxhr = $.ajax({url: url, data: data});
//thousands of lines of code here
$.when(jqxhr).done(function (responseText) { console.log(responseText); });发布于 2013-01-10 14:51:11
您无法以所需的方式保存变量,因为它位于闭包内。最好的方法是将响应数据传递给将在请求完成后执行的函数。下面是一个例子:
//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);
}https://stackoverflow.com/questions/14260457
复制相似问题