使用ajax()时的全局变量

时间:2015-05-27 02:10:42

标签: javascript jquery ajax

$.ajax({
        type: "POST",
url:"example.com",
        success: function (data) {
            myData = data;


        },
        error: function (response) {
        }
//here json = myData; 
    });

我必须在ajax()的回调函数之外做json = myData以使其成为一个全局变量,我想这是一个好习惯吗?我怎样才能使用我的ajax回调数据?

1 个答案:

答案 0 :(得分:3)

为什么要打破Ajax设计的异步特性呢? StackOverflow上反复询问过类似的“问题”。但是他们忘记的一个关键问题是Ajax被设计为异步,并且通过尝试使用函数之外的数据,你有点违反了规则。

TL; DR:Ajax被设计为异步,让我们保持这种方式。

如果你想保持整洁的结构,请定义一个处理程序。

function handler(data) {
  // Handle data
  console.log(data)
}

$.ajax({
    url: "http://localhost",
    type: "POST",
    data: {'example':true},
    success:handler
});

我不建议这种方法,请阅读上面的原因。

如果你确实需要执行同步Ajax请求(sjax?Lol,jQuery确实提供了“关闭异步性质”的功能,那么在对象中使用async: false似乎可以解决这个问题。例如:

var outterData;

$.ajax({
    async: false,
    url: "/echo/json/",
    data: {testing:true},
    success: function(data){
      outterData = data;
    }
});

console.log(outterData);

如您所见,async: false包含在此内容中。它似乎工作正常,基于this JSFiddle内置。

但是请记住,我不建议你带走Ajax的异步特性(它在名称中,因为大声喊叫)。但如果你必须的话。