可以将变量值中的$ .ajax传递给全局?

时间:2014-05-25 02:54:55

标签: javascript jquery ajax

有没有办法将测试值从ajax函数传递给global?

$('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; 

我的console.log显示undefined

2 个答案:

答案 0 :(得分:0)

设置var的值时,不要在ajax回调中使用test关键字。

答案 1 :(得分:0)

这里有两个问题:

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

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

你的第二个问题是默认情况下ajax是异步的。这意味着在所有后续代码完成运行之前,它不会调用test = true。如果您在test来电之后立即检查ajax的值,那么它将是undefined,因为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;
});