我对JS非常陌生,我试图在函数中设置变量的值,但是在设置值后它是“未定义的”。我的代码如下:
(function (name, context, definition){ 'use strict' ...} ('FP2', this, function (){...})
var fp = new FP2();
fp.get(function(result, components) { for (var index in components){...};
var IP = 'nothing';
$.getJSON('http://gd.geobytes.com/GetCityDetails?callback=?', function(data) {
this.IP = JSON.stringify(data, null, 2);
alert(this.IP);
});
alert(IP);
});
我希望IP变量在函数内部和外部具有相同的值,但事实并非如此。内部警报显示期望值,但功能外部的警报显示“无”。 根据类似的问题1,2,3,我没有使用var在函数内部重新声明局部变量,而是使用'指向函数外部的IP变量。这样。”,所以我不明白为什么它不能按预期工作?
答案 0 :(得分:1)
无需使用this.IP
,当您在API调用中使用this
时,是指该API调用函数本身。只需使用IP
即可。
API调用之外的alert(IP);
也不会返回结果。即使在API返回某些数据之前,也会立即调用此函数,因此它将打印出先前的值undefined
。
(function (name, context, definition){ 'use strict' ...} ('FP2', this, function (){...})
var fp = new FP2();
fp.get(function(result, components) { for (var index in components){...};
var IP = undefined;
$.getJSON('http://gd.geobytes.com/GetCityDetails?callback=?', function(data) {
IP = JSON.stringify(data, null, 2);
alert(IP);
});
alert(IP); //This will return undefined
});
答案 1 :(得分:0)
如果要在任何地方获取IP值,请使用以下方法:
var IP = undefined;
var fpData = {};
function setIP(){
var valueIP = undefined;
$.ajax({
url: "http://gd.geobytes.com/GetCityDetails?callback=?",
async: false,
dataType: 'json',
success: function(data) {
valueIP = JSON.stringify(data, null, 2); //console.log(valueIP);
//return valueIP;
localStorage.setItem('IP', valueIP);
}
});
//return valueIP;
}
//call setIP
setIP();
IP = localStorage.getItem('IP');
console.log(IP);