Javascript 是否可以将$.ajax内部变量值传递给全局变量?

Javascript 是否可以将$.ajax内部变量值传递给全局变量?,javascript,jquery,ajax,Javascript,Jquery,Ajax,有没有办法将测试值从ajax函数传递到全局函数 $('button').on('click', 'loader', function(){ $.ajax({ url: 'www.myweb.com/string/index.html', type: 'get', dataType: 'html', success: function(data){ var test = true;

有没有办法将测试值从ajax函数传递到全局函数

$('button').on('click', 'loader', function(){
    $.ajax({
          url: 'www.myweb.com/string/index.html',
          type: 'get',
          dataType: 'html',
           success: function(data){ 
             var test = true;
           },
            error: function(data){
              var test = false;

           }
});

var test; 

my console.log显示未定义的

只是在设置测试值时不要在ajax回调中使用var关键字。

这里有两个问题:

在成功处理程序中,您正在使用var关键字重新定义测试。现在,它使用一个名为test的新变量,该变量的作用域仅限于成功处理程序

删除var关键字。然后,它将在外部范围中查找名为test的变量,逐步向外搜索,直到找到名为test的变量,或者找不到一个,在这种情况下,它将创建一个附加到窗口的新变量

第二个问题是ajax在默认情况下是异步的。这意味着在所有后续代码完成运行之前,它不会调用test=true。如果在ajax调用之后立即检查test的值,那么它将是未定义的,因为还没有调用done

对于这个简单的示例,通过将async属性设置为false,使调用同步

// Do you want to use the text within this scope?
// If not, remove this declaration, and then it really will be
// window.test
var test;

$('button').on('click', 'loader', function(){
    $.ajax({
          url: 'www.myweb.com/string/index.html',
          type: 'get',
          async: false,
          dataType: 'html'
}).done(function() {
     test = true;
}).fail(function() {
    test = false;
});

欢迎来到异步的精彩世界!你不能那样做。还有,这是一个本地变量,这次没有提到异步?在没有它的情况下这样做可能比使用async@Matt格林:实际上,我相信这将使用在ajax方法调用之后声明的测试,因为按照时间顺序,声明将在调用成功方法之前运行。这是一段稍微令人困惑的代码,但实际上并不错误:-谢谢你的回答@AndrewShepherd复制了两次是有原因的吗?而且仍然得到undefined@AndrewShepherd实际上,变量声明放在哪里并不重要,请参见。@olo看看它是否有用-谢谢,我在没有var的情况下尝试过,但仍然无法获得正确的值;