AJAX请求变量问题

时间:2013-01-10 14:43:45

标签: jquery ajax variables callback global-variables

  

可能重复:
  jQuery global variable problem

我正在进行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响应值设置此变量?

2 个答案:

答案 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); });