在下面的代码中,我试图检索客户端机器IP。问题出在TestIP变量中,当我调试脚本时,这个变量显示为null。退出$ .getJSON()函数后,如何指定此值以显示带有IP的清除字符串。
<script>
var test1 = null;
$(document).ready(function () {
var inDesignMode = document.forms[MSOWebPartPageFormName].MSOLayout_InDesignMode.value;
$.getJSON('http://smart-ip.net/geoip-json?callback=?', function (data) {
//getting IP correctly
test1 = data.host;
$('#' + '<%=hdnDeliServerGIP.ClientID%>').val(data.host);
})
if (inDesignMode != "1") {
//should show IP - is Null
var TestIP = test1;
//Not getting the value from hidden asp object
var GIP = $('#' + '<%=hiddenElementIP.ClientID%>').val() != '' ? $('#' + '<%=hdnDeliServerGIP.ClientID%>').val() : 'not set';
}
});
提前致谢
答案 0 :(得分:0)
问题是getJSON
是异步调用,因此在 if
返回之前,您的后续getJSON
块实际上被称为。您应该移动if
阻止内的 getJSON
回调:
$.getJSON('http://smart-ip.net/geoip-json?callback=?', function (data) {
//getting IP correctly
test1 = data.host;
$('#' + '<%=hdnDeliServerGIP.ClientID%>').val(data.host);
if (inDesignMode != "1") {
//should show IP
var TestIP = test1;
//Getting value from hidden asp object
var GIP = $('#' + '<%=hiddenElementIP.ClientID%>').val() != '' ? $('#' + '<%=hdnDeliServerGIP.ClientID%>').val() : 'not set';
}
})
答案 1 :(得分:0)
在getJSON
回调中使用您的代码,例如
var inDesignMode = document.forms[MSOWebPartPageFormName].MSOLayout_InDesignMode.value;
$.getJSON('http://smart-ip.net/geoip-json?callback=?', function (data) {
//getting IP correctly
test1 = data.host;
$('#' + '<%=hdnDeliServerGIP.ClientID%>').val(data.host);
// use you code here in callback function
if (inDesignMode != "1") {
//should show IP
var TestIP = test1;
//Getting value from hidden asp object
var GIP = $('#' + '<%=hiddenElementIP.ClientID%>').val() != '' ? $('#' + '<%=hdnDeliServerGIP.ClientID%>').val() : 'not set';
}
})
答案 2 :(得分:0)
将if语句放在$.getJSON
调用中,位于当前所在行的末尾。问题是$.getJSON
是异步的,所以它不一定在您尝试访问test1
时完成
所以你想要的是:
$.getJSON('http://smart-ip.net/geoip-json?callback=?', function (data) {
//getting IP correctly
test1 = data.host;
$('#' + '<%=hdnDeliServerGIP.ClientID%>').val(data.host);
if (inDesignMode != "1") {
//should show IP - is Null
var TestIP = test1;
//Not getting the value from hidden asp object
var GIP = $('#' + '<%=hiddenElementIP.ClientID%>').val() != '' ? $('#' + '<%=hdnDeliServerGIP.ClientID%>').val() : 'not set';
}
})
答案 3 :(得分:0)
为了在javascript中创建一个全局变量,我们需要声明变量而不使用“var”关键字。
尝试使用“test1 = null;”
答案 4 :(得分:0)
为了在全局创建一个js变量,你需要首先声明一个变量然后将json数据分配给它,然后你可以全局访问该变量。
例如:
$(document).ready(function () {
var inDesignMode = document.forms[MSOWebPartPageFormName].MSOLayout_InDesignMode.value;
$.ajax({
url :'http://smart-ip.net/geoip-json?callback=?',
async:false,
dataType:"json",
success: function (data) {
//getting IP correctly
test = data.host;
}});
if (inDesignMode != "1") {
//should show IP - is Null
var TestIP = test1;
//Not getting the value from hidden asp object
var GIP = $('#' + '<%=hiddenElementIP.ClientID%>').val() != '' ? $('#' + '<%=hdnDeliServerGIP.ClientID%>').val() : 'not set';
}
});
注意: - 请在页面开头的此次通话之外定义一次测试变量
希望这会对你有所帮助:)。