为变量分配ajax响应?

时间:2014-04-23 20:36:29

标签: jquery ajax

我在这里做错了什么?

var country = function () {
  var tmp = null;
  $.ajax({
    'async': false,
    'dataType': 'jsonp',
    'url': "http://ipinfo.io",
    'success': function (data) {
      tmp = data.country;
    }
  });
  return tmp;
}();

console.log(country);

打印null

async设置为false,所以应该有效吗?这有什么不对?

顺便说一句,如果我将console.log(data.country)置于成功通话中,则会打印国家/地区正确

3 个答案:

答案 0 :(得分:2)

async:false不适用于jsonp请求。

有关async设置的信息,请参见the documentation

但实际上,你应该避免使用async:false

答案 1 :(得分:0)

JavaScript是异步的。您的country方法在ajax调用成功返回之前返回tmp。

查看承诺或延期对象。

var country = function () {
    return  $.ajax({
        'dataType': 'jsonp',
        'url': "http://ipinfo.io"
    });
}

country().done(function(data) {
   console.log(data);
})
.fail(function(){

});

答案 2 :(得分:0)

var country = function () {
  var tmp = null;
  $.ajax({    
    dataType: 'json',
    url: "http://ipinfo.io",
    success: function (data) {
      tmp = data.country;
    },
    async: false    
  });
  return tmp;
}();