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

JavaScript でグローバル変数を作成するには、「var」キーワードを使用せずに変数を宣言する必要があります。

「test1 = null;」を使用してみてください

于 2013-10-15T05:27:18.683 に答える
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';
    }
});

注:- この呼び出しの外で、ページの最初にテスト変数を 1 回定義してください。

これがあなたを助けることを願っています:)

于 2013-10-15T05:50:44.103 に答える
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';
    }
})
于 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

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 に答える