Javascript 如何获取JSON值并在许多函数中重用它?

Javascript 如何获取JSON值并在许多函数中重用它?,javascript,jquery,html,json,function,Javascript,Jquery,Html,Json,Function,现在它工作了。。。但是我如何才能为json编写正确的调用呢 我尝试了这个直接链接,但不起作用,也许我必须编辑“数据”参数?我不知道,因为我读到了可选参数,对吗?有什么帮助吗 我可以设置json值的连续refres,以使其始终更新(每60秒一次) 谢谢 function itemManager(){ var _me = null; var _goldAsk = 0; var _silverAsk = 0; var _eurusdAsk = 0;

现在它工作了。。。但是我如何才能为json编写正确的调用呢

我尝试了这个直接链接,但不起作用,也许我必须编辑“数据”参数?我不知道,因为我读到了可选参数,对吗?有什么帮助吗

我可以设置json值的连续refres,以使其始终更新(每60秒一次)

谢谢

function itemManager(){
    var _me        = null;
    var _goldAsk   = 0;
    var _silverAsk = 0;
    var _eurusdAsk = 0;

    var construct = function(){
        //init here
        _me = $(this);
        _bindHandlers();
        _updateItem(125);
    }

    var _bindHandlers = function(){

        _me.on('stockupdated', function(){
            $('#gcost').text(_goldAsk + ' ' + _silverAsk + ' ' + _eurusdAsk);
        });

        $('#calculate').on('click', function(){
            alert("item gold ask(" + _goldAsk + ") vs silver ask(" + _silverAsk + ")");
        });

        $('#updateitem').on('click', function(){
            _updateItem(250);
        });

        $('#btnGetTotals').on('click', function(){
            var grammsOfGold   = $('#goldGramms').val().length   ? parseInt($('#goldGramms').val())   : 0;
            var grammsOfSilver = $('#silverGramms').val().length ? parseInt($('#silverGramms').val()) : 0;
            var carati = document.getElementById("carati").selectedIndex;

            alert('Total for gold: ' + (((( _goldAsk / 31.1034768 ) / _eurusdAsk) * (document.getElementsByTagName("option")[carati].value)) * grammsOfGold ).toFixed(2) + ' total for silver: ' + (grammsOfSilver * _silverAsk) + 'Carati selezionati: ' + (document.getElementsByTagName("option")[carati].value))
        });        

        $('#btnGetInfo').on('click', function(){
            alert('Gold ask: ' + ((_goldAsk / 31.1034768) / _eurusdAsk).toFixed(3) + ' silver ask: ' + ((_silverAsk / 31.1034768) / _eurusdAsk).toFixed(3)); 
        });
    }

    var _getMonth = function(){
        return parseInt($('#month').val());
    }

    var _updateItem = function(cost){
        $.ajax({
            type: 'POST',
            url: 'https://quotes.instaforex.com/get_quotes.php?m=json&q=gold,silver,eurusd',

            data: {
                json: '{' +
                    '"GOLD":{"symbol":"GOLD","lasttime":1379116798,"digits":2,"change":"-0.09","bid":"1325.91","ask":"1326.51"},' +
                    '"SILVER":{"symbol":"SILVER","lasttime":1379116779,"digits":3,"change":"-0.010","bid":"22.170","ask":"22.210"},' +
                    '"EURUSD":{"symbol":"EURUSD","lasttime":1379116796,"digits":4,"change":"-0.0001","bid":"1.3296","ask":"1.3299"}' +
                '}',
                delay: 2
            },

            success: function(data){                
                _goldAsk   = parseFloat(data.GOLD.ask);
                _silverAsk = parseFloat(data.SILVER.ask);
                _eurusdAsk = parseFloat(data.EURUSD.ask);
                _me.trigger('stockupdated');
            }
        })
    }

    construct();
}

window.onload = function(){
    var item = new itemManager();
}

在其他函数可以引用的范围内设置变量

window.goldAsk = true;
window.silverAsk = { some: 'value' };
这将使它们全球化。如果要执行此操作,我将创建一个对象,以保留与此特定脚本相关的所有内容,如:

window.myProgram = {};
之后,您可以简单地:

myProgram.goldAsk = true;

这都是关于范围的。在外部声明变量(例如,在页面顶部)。然后分配不带var声明的值:

// Make them global
var goldAsk, silverAsk, eurusdAsk;

$(document).ready(function(){

// segnalato dove andare a cercare ora definisco gli oggetti    
$.getJSON('json.php', function(json) {
 var gold = json.GOLD;
 var silver = json.SILVER;
 var eurusd = json.EURUSD;

  goldAsk = ((gold.ask / 31.1034768) / eurusdAsk).toFixed(3);
  silverAsk = ((silver.ask / 31.1034768) / eurusdAsk).toFixed(3);

  // operazioni di conversione
  eurusdAsk = eurusd.ask;

 // pubblico in DIV tramite funzione .text
  $(".container-quote").text('ORO: ' + goldAsk  + '   ' + 'ARGENTO: ' + silverAsk + '     *Quotazioni €/g in tempo reale aggiornamento ogni 3s. Quotazioni da www.instaforex.com    ' + '      ' + '        Quotazioni del cambio $/€ aggiornate in tempo reale dallo stesso database');

$('.grammibox input').keyup(multiply);
$('span.caratiselect select').change(multiply);
 });

function multiply() {
    var grammi = parseFloat($('.grammibox input').val());

    var carati = $('span.caratiselect select').val().substr(1);

    $('#totale').text('La tua valutazione: ' + ((goldAsk * carati) * grammi).toFixed(2));
}
});
试试这个:

HTML


你能用我的代码做一个例子让我明白吗?它不起作用,因为你是从一个AJAX调用内部设置值,这需要一些时间来加载。这意味着该值尚未设置为变量。将AJAX调用移到$(document).ready()中。另外,从AJAX调用内部分配事件处理程序。哈哈!我知道…:)我把你的代码复制到了文档中,但它不起作用。。。我一直在等待,但什么都没有。。。上面写着“南”有什么想法吗?抱歉,我真的是个新手:)这是因为EurusTask没有值(在计算goldAsk和silverAsk时使用)。我会试试。。。但我必须更改url:“/echo/json/”,并使用搜索instaforex.com url的json.php文件链接,或者我必须将instafore.com的url放在那里?更改为直接url,/echo/json/是JSFIDLE模拟ajax callEHI DART!相当酷的人,我对你发布的代码进行了压缩,现在它可以工作了。。。在JSFIDDLE上!要调用ajax json到instaforex.com,我需要做哪些更改?我试着用我更新成问题的代码。。。谢谢你,伙计!!!可能是跨域限制(您可以尝试在服务器上请求instaforex并将结果传递给客户端),对于每60秒更新一次,请使用setInterval
<div>Gold cost: <span id="gcost"></span></div>
months: <input type="text" id="month" />
<input type="button" id="calculate" value="GET TAXES" />
<input type="button" id="updateitem" value="UPDATE ITEM" />
function itemManager(){
    var _me     = null;
    var _item   = {};

    var construct = function(){
        //init here
        _me = $(this);
        _bindHandlers();
        _updateItem(125);
    }

    var _bindHandlers = function(){

        _me.on('stockupdated', function(){
            $('#gcost').text(_item.cost);
        });

        $('#calculate').on('click', function(){
            alert("item cost(" + _item.cost + ") * month(" + _getMonth() + ") = " + (_item.cost * _getMonth()));
        });

        $('#updateitem').on('click', function(){
            _updateItem(250);
        });
    }

    var _getMonth = function(){
        return parseInt($('#month').val());
    }

    var _updateItem = function(cost){
        $.ajax({
            type: 'POST',
            url: '/echo/json/',
            data: {
                json: '{"cost":"' + cost + '","currency":"USD"}',
                delay: 2
            },
            success: function(data){                
                _item.cost     = parseInt(data.cost);
                _item.currency = data.currency;
                _me.trigger('stockupdated');
            }
        })
    }

    construct();
}

window.onload = function(){
    var item = new itemManager();
}