Javascript 如何获取JSON值并在许多函数中重用它?
现在它工作了。。。但是我如何才能为json编写正确的调用呢 我尝试了这个直接链接,但不起作用,也许我必须编辑“数据”参数?我不知道,因为我读到了可选参数,对吗?有什么帮助吗 我可以设置json值的连续refres,以使其始终更新(每60秒一次) 谢谢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;
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();
}