2013-10-15 27 views
0

在下面的代碼中,我試圖檢索客戶機IP。問題出在TestIP變量中,當我調試腳本時,這個變量顯示爲空。在從$ .getJSON()函數退出後,如何分配此值以顯示帶有IP的清除字符串。如何訪問JSON數據globaly

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

在此先感謝

+1

另一個異步問題。 .. –

回答

0

的問題是,getJSON是一個異步調用,所以你以後if塊之前getJSON回報實際上是所謂。你應該移動ifgetJSON回調:

$.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'; 
    } 
}) 
+0

工作。謝謝 – laspalmos

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

爲了使在JavaScript中的全局變量,我們需要聲明變量而不使用「var」關鍵字。

嘗試使用「test1 = null;」

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

注: - 請在頁面的開頭這一次外呼定義測試變量

希望這將幫助你:)