首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AJAX请求变量问题

AJAX请求变量问题
EN

Stack Overflow用户
提问于 2013-01-10 14:43:44
回答 2查看 3.5K关注 0票数 0

可能重复: jQuery global variable problem

我正在执行一个jQuery AJAX调用,我希望将响应保存到一个变量中。但是,这个变量在AJAX调用函数之外没有响应的值。如何在AJAX调用函数之外获得响应?

示例:

代码语言:javascript
复制
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响应值设置此变量?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-10 14:51:51

简单的答案是ajax异步触发。从本质上说,这意味着您不知道ajax代码何时完成,因此调用$.ajax之后的任何代码行都可以在$.ajax完成之前执行(但不一定)。这就是为什么ajax的回调是必要的。

一种解决方案是使用jQuery.ajax选项async: false使ajax请求同步,但这可能不是所需要的。

真正的解决方案是适当地使用回调--在responseText函数中完成所有需要使用success:的工作。

不喜欢把所有的代码放在一个地方?jQuery非常好,可以创建延迟并让jqxhr实现它:

代码语言:javascript
复制
var jqxhr = $.ajax({url: url, data: data});
//thousands of lines of code here
$.when(jqxhr).done(function (responseText) { console.log(responseText); });
票数 1
EN

Stack Overflow用户

发布于 2013-01-10 14:51:11

您无法以所需的方式保存变量,因为它位于闭包内。最好的方法是将响应数据传递给将在请求完成后执行的函数。下面是一个例子:

代码语言:javascript
复制
//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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14260457

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档