0

在下面的代码中,我试图检索客户端机器 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';
    }
});

提前致谢

4

5 回答 5

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';
    }
});

注意:- 请在页面开头的此调用之外定义测试变量

希望对你有帮助 :)

于 2013-10-15T05:50:44.103 回答
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';
    }
})
于 2013-10-15T05:24:00.447 回答
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';
    }
})
于 2013-10-15T05:24:13.813 回答
0

为了在javascript中创建一个全局变量,我们需要在不使用“var”关键字的情况下声明变量。

尝试使用“test1 = null;”

于 2013-10-15T05:27:18.683 回答
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';
        }
    })
于 2013-10-15T05:26:35.320 回答