如何全局访问json数据

时间:2013-10-15 05:21:15

标签: javascript jquery

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

提前致谢

5 个答案:

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

注意: - 请在页面开头的此次通话之外定义一次测试变量

希望这会对你有所帮助:)。