Сообщений: 77
Тем: 14
Зарегистрирован: Jun 2015
Репутация:
-117
Всем привет. Пишу калькулятор для расчета стоимости заказа.
-
Функционал написал, возникла проблема. Нужно в формулу расчета вставлять курс валюты.
Парсер валюты написал
Код: <?php
$today = date("d/m/Y");
$fp = fopen('cb.xml', 'w');
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,
'http://www.cbr.ru/scripts/XML_daily.asp?date_req='.$today);
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_exec($ch);
fclose($fp);
curl_close ($ch);
?>
Получаю нужный курс
Код: <script src="http://code.jquery.com/jquery-latest.js";></script>
<SCRIPT>
$(document).ready(function () {
$.ajax({
type: "GET",
async : false,
url: "cb.xml",
dataType: "xml",
success: XmlKurs
});
function XmlKurs (xml) {
$(xml).find("Valute").each(function(){
if($(this).attr('ID')=='R01239') {
p=$(this).find("Value").text();
$("p").append(document.getElementById('tcena').value()*$(this).find("Value"));
}
});
}
});
</script>
Есть формула
Код: S = (Pbum + Ppec + Potd)*Euro;
Переменная Euro должна получаться автоматом из парсера
Объявляю функцию
Код: var Euro = new function () {
$(document).ready(function () {
$.ajax({
type: "GET",
async : false,
url: "cb.xml",
dataType: "xml",
success: XmlKurs
});
function XmlKurs (xml) {
$(xml).find("Valute").each(function(){
if($(this).attr('ID')=='R01239') {
d=$(this).find("Value").text();
$("p").append(document.getElementById('Euro').value()*$(this).find("Value"));
}
});
}
});
}
-В итоге получаю ответ на расчет-
Общая стоимость -= Na руб.
Стоимость 1 экземпляра = Na руб.
Вопрос, что я не так делаю и как подставить число из функции в формулу?
Сообщений: 6,450
Тем: 262
Зарегистрирован: Nov 2007
Репутация:
44,165
UPDATE. Я понял, вы в файл сбрасываете.
Сообщений: 77
Тем: 14
Зарегистрирован: Jun 2015
Репутация:
-117
PROGRAMMATOR Написал:Парсер, ничего не возвращает в вашем коде. Результат содержится в curl_exec(). По факту я могу вывести курс в HTML виде на страницу. Суть в том, что число я получаю. Но как мне его в формулу вставить?
Сообщений: 6,450
Тем: 262
Зарегистрирован: Nov 2007
Репутация:
44,165
Так а формула где находится?
Сообщений: 77
Тем: 14
Зарегистрирован: Jun 2015
Репутация:
-117
11-22-2015, 05:01 PM
(Сообщение последний раз редактировалось: 11-22-2015, 05:03 PM Antonio.)
Формула находится в HTML страничке
Скрипт
Код: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD><TITLE>Листовки, буклеты, флаеры, плакаты,визитки и др. листовая продукция.</TITLE>
<META http-equiv=Content-Type content="text/html; charset=windows-1251">
</head>
<body>
<script src="http://code.jquery.com/jquery-latest.js";></script>
<SCRIPT>
$(document).ready(function () {
$.ajax({
type: "GET",
async : false,
url: "cb.xml",
dataType: "xml",
success: XmlKurs
});
function XmlKurs (xml) {
$(xml).find("Valute").each(function(){
if($(this).attr('ID')=='R01239') {
p=$(this).find("Value").text();
$("p").append(document.getElementById('tcena').value()*$(this).find("Value"));
}
});
}
});
function calc1() {
var Euro = new function () {
$(document).ready(function () {
$.ajax({
type: "GET",
async : false,
url: "cb.xml",
dataType: "xml",
success: XmlKurs
});
function XmlKurs (xml) {
$(xml).find("Valute").each(function(){
if($(this).attr('ID')=='R01239') {
d=$(this).find("Value").text();
$("p").append(document.getElementById('Euro').value()*$(this).find("Value"));
}
});
}
});
}
var Li = new Number(list.Li.value);
var Si = new Number(list.Si.value);
var Ti = new Number(list.Ti.value);
var Cf = new Number(list.Cf.value);
var Cb = new Number(list.Cb.value);
var F = new Number(list.F.checked);
var B = new Number(list.B.checked);
var Pf = new Number(list.Pf.checked);
var N = new Number(list.N.checked);
var V = new Number(list.V.checked);
var Lg = new Number(list.Lg.checked);
var Lm = new Number(list.Lm.checked);
if (Li.toString() == "NaN" || Li <= 0) {
alert('Введено неверное значение формата!');
list.Li.focus();
return false;
}
if (Si.toString() == "NaN" || Si <= 0) {
alert('Введено неверное значение формата!');
list.Si.focus();
return false;
}
if ( (Li < 20 || Li > 430) || (Si < 20 || Si > 430) ) {
alert('Формат задается в пределах от 20 до 430!');
return false;
}
if (Ti.toString() == "NaN" || Ti <= 0) {
alert('Введено неверное значение тиража!');
list.Ti.focus();
return false;
}
else {
Nil1 = Math.floor(438/ (Li + 1) );
Nis1 = Math.floor(306/ (Si + 1) );
Ni1 = Nil1 * Nis1;
Nil2 = Math.floor(438/ (Si + 1) );
Nis2 = Math.floor(306/ (Li + 1) );
Ni2 = Nil2*Nis2;
Ni = Math.max(Ni1,Ni2);
Na3 = Ti / Ni;
Rb = list.RbK.value.substring(0, list.RbK.value.indexOf('_'));
K = list.RbK.value.substring(list.RbK.value.indexOf('_')+1);
Phs = Math.floor(0.999+(Na3*Rb/70));
if ( Ni1 > Ni2 ) {
Prz=(6+(Nil1-1)+(Nis1-1))*0.37*Phs;
}
else {
Prz=(6+(Nil2-1)+(Nis2-1))*0.37*Phs;
}
Pbum=(0.6 * Rb * K *( Na3 + 100))/4;
if (!(Cf-Cb) && ((Li<310 && Si<=240) || (Li<=310 && Si<240) || (Si<310 && Li<=240) || (Si<=310 && Li<240))) {
Pl = 1.5*(Cf+Cb);
Ppec = 2*(Cf+Cb)+(Cf+Cb)*(10.0+0.0033*Na3);
}
else {
Pl = 3*(Cf+Cb);
Ppec = 2*(Cf+Cb)+(Cf+Cb)*(20+0.0033*Na3);
}
//alert(Ppec);
Potd = Pl + F*(0.0022*Ti+500) + B * (20 + Na3 * 0.01) + Pf * Na3 * 0.01 + V*(Na3 * 0.05)+N*(30+Ti*0.003) + Lg * Na3 * 0.25 + Lm * Na3 * 0.5 + Prz;
//Общая стоимость тиража
[color=Red] S = (Pbum + Ppec + Potd)*Euro;[/color]
S1 = S / list.Ti.value;
S = S.toString().substring(0,S.toString().indexOf(".")+3);
S1 = S1.toString().substring(0,S1.toString().indexOf(".")+3);
list.result.value = "Общая стоимость тиража = " + S + " руб.\nСтоимость 1 экземпляра = " + S1 + " руб.";
return true;
}
}
function format(dx,dy){
document.list.Si.value = dx;
document.list.Li.value = dy;
}
</SCRIPT>
<META content="MSHTML 6.00.2800.1106" name=GENERATOR>
<STYLE type=text/css></STYLE>
<LINK href="df2.css" type=text/css rel=stylesheet></HEAD>
<BODY>
<H3>Листовки, буклеты, флаеры, плакаты,<BR>визитки и др. листовая продукция</H3>
<P>
<TABLE
style="BORDER-TOP-STYLE: solid; BORDER-RIGHT-STYLE: solid; BORDER-LEFT-STYLE: solid; BORDER-BOTTOM-STYLE: solid"
borderColor=#ffffff cellSpacing=0 cellPadding=5 width=350
borderColorLight=#999999 border=2>
<FORM name=list action="">
<TBODY>
<TR>
<TD>Стандартные форматы</TD>
<TD>
<INPUT style="BORDER-LEFT-COLOR: #999999; BORDER-BOTTOM-COLOR: #999999; COLOR: #000080; BORDER-TOP-COLOR: #999999; BACKGROUND-COLOR: #ffffff; BORDER-RIGHT-COLOR: #999999" onclick=format(420,297); type=button value=A3 name=a3>
<INPUT style="BORDER-LEFT-COLOR: #999999; BORDER-BOTTOM-COLOR: #999999; COLOR: #000080; BORDER-TOP-COLOR: #999999; BACKGROUND-COLOR: #ffffff; BORDER-RIGHT-COLOR: #999999" onclick=format(210,297); type=button value=A4 name=a4>
<INPUT style="BORDER-LEFT-COLOR: #999999; BORDER-BOTTOM-COLOR: #999999; COLOR: #000080; BORDER-TOP-COLOR: #999999; BACKGROUND-COLOR: #ffffff; BORDER-RIGHT-COLOR: #999999" onclick=format(145,210); type=button value=A5 name=a5>
<INPUT style="BORDER-LEFT-COLOR: #999999; BORDER-BOTTOM-COLOR: #999999; COLOR: #000080; BORDER-TOP-COLOR: #999999; BACKGROUND-COLOR: #ffffff; BORDER-RIGHT-COLOR: #999999" onclick=format(145,105); type=button value=A6 name=a6>
<INPUT style="BORDER-LEFT-COLOR: #999999; BORDER-BOTTOM-COLOR: #999999; COLOR: #000080; BORDER-TOP-COLOR: #999999; BACKGROUND-COLOR: #ffffff; BORDER-RIGHT-COLOR: #999999" onclick=format(98,210); type=button value=1/3A4 name=1/3a4>
<BR>
<TR>
<TD><FORM action="" name="list">Формат </TD>
<TD><INPUT maxLength=3 size=3 name=Li><FONT style="FONT-SIZE: 11px">мм</FONT><B>x</B>
<INPUT maxLength=3 size=3 name=Si><FONT style="FONT-SIZE: 11px">мм</FONT></TD></TR>
<TR>
<TD width=150>Тираж</TD>
<TD width=200><INPUT maxLength=8 size=8 name=Ti></TD></TR>
<TD width=150>Курс Евро**</TD>
<TD width=200><INPUT maxLength=8 size=8 name=Euro id=euro"></TD></TR>
<TR>
<TD colSpan=2>Количество красок:</TD></TR>
<TR>
<TD>Лицо <SELECT size=1 name=Cf>
<OPTION value=4 selected>4</OPTION>
<OPTION value=1>1</OPTION>
<OPTION value=2>2</OPTION>
<OPTION value=3>3</OPTION>
<OPTION value=5>5</OPTION>
<OPTION value=6>6</OPTION></SELECT></TD>
<TD>Оборот <SELECT size=1 name=Cb> <OPTION value=4 selected>4</OPTION>
<OPTION value=0>0</OPTION>
<OPTION value=1>1</OPTION>
<OPTION value=2>2</OPTION>
<OPTION value=3>3</OPTION>
<OPTION value=5>5</OPTION>
<OPTION value=6>6</OPTION>
</SELECT></TD></TR>
<TR>
<TD>Бумага / Плотность</TD>
<TD><SELECT size=1 name=RbK>
<OPTION value=0.0245_0.0245>ОФСЕТНАЯ 80</OPTION>
<OPTION value=0.027_0.27>МЕЛОВАННАЯ 90</OPTION>
<OPTION value=0.035_0.035>МЕЛОВАННАЯ 115</OPTION>
<OPTION value=0.039_0.039>МЕЛОВАННАЯ 130</OPTION>
<OPTION value=0.045_0.045>МЕЛОВАННАЯ 150</OPTION>
<OPTION value=0.052_0.052>МЕЛОВАННАЯ 170</OPTION>
<OPTION value=0.06_0.06>МЕЛОВАННАЯ 200</OPTION>
<OPTION value=0.076_0.076>МЕЛОВАННАЯ 250</OPTION>
<OPTION value=0.09_0.09>МЕЛОВАННАЯ 300</OPTION>
<OPTION value=0.31_0.31>Картон 2 ст 300</OPTION>
<OPTION value=0.26_0.26>Картон 1 ст 250</OPTION>
</SELECT></TD></TR>
<TR>
<TD colSpan=2>
<B>Дополнительные операции:</b>
<BR><INPUT type=checkbox name=F> Фальцовка
<BR><INPUT type=checkbox name=B> Биговка
<BR><INPUT type=checkbox name=Pf> Перфорация
<BR><INPUT type=checkbox name=N> Нумерация
<BR><INPUT type=checkbox name=V> Высечка/тиснение </TD></TR>
<TR>
<TD colSpan=2>Ламинирование:</TD></TR>
<TR>
<TD colSpan=2><INPUT onclick=list.Lm.checked=false
type=checkbox name=Lg> глянцевое <INPUT
onclick=list.Lg.checked=false type=checkbox name=Lm> матовое</TD></TD>
<TR>
<TD colSpan=2><TEXTAREA name=result rows=5 cols=50>0.00</TEXTAREA><BR><INPUT onClick="return calc1();" type=button value=Посчитать>
<INPUT type=reset value=Очистить>
<BR><p class="prim">* Стоимость не является публичной офертой.
<BR> Окончательная стоимость тиража рассчитывается менеджером типографии.
<BR> При расчете стоимости нумерации учитывается только один номер на листе.
<BR>Цены обновлены на 30.01.2014
</P></P>
</FORM></TD></TR></TBODY></TABLE></P></BODY></HTML>
Сообщений: 6,450
Тем: 262
Зарегистрирован: Nov 2007
Репутация:
44,165
Это уже обфускацию прошло или такой стиль?
Пропишите после формулы:
[SRC="javascript"]console.log(Pbum, Ppec, Potd, Euro);[/SRC]
Сообщите что возвращает в консоль браузера. Очень похоже на то, что множится на строку.
Сообщений: 77
Тем: 14
Зарегистрирован: Jun 2015
Репутация:
-117
11-22-2015, 05:25 PM
(Сообщение последний раз редактировалось: 11-22-2015, 05:28 PM Antonio.)
PROGRAMMATOR Написал:Это уже обфускацию прошло или такой стиль?
Пропишите после формулы:
[SRC="javascript"]console.log(Pbum, Ppec, Potd, Euro);[/SRC]
Сообщите что возвращает в консоль браузера. Очень похоже на то, что множится на строку.
Возможно у меня мало опыта еще в JS, но код вроде чистый
Вот что пишет консоль
Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience. For more help, check http://xhr.spec.whatwg.org/.
jquery-latest.js:9183 Uncaught TypeError: Cannot read property 'value' of null
После запуска расчета
jquery-latest.js:9592 Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience. For more help, check http://xhr.spec.whatwg.org/.
jquery-latest.js:9183 Uncaught TypeError: Cannot read property 'value' of null(anonymous function) @ test.htm:27jQuery.extend.each @ jquery-latest.js:383jQuery.fn.jQuery.each @ jquery-latest.js:136XmlKurs @ test.htm:24fire @ jquery-latest.js:3119self.fireWith @ jquery-latest.js:3231done @ jquery-latest.js:9275callback @ jquery-latest.js:9685send @ jquery-latest.js:9691jQuery.extend.ajax @ jquery-latest.js:9176(anonymous function) @ test.htm:16fire @ jquery-latest.js:3119self.fireWith @ jquery-latest.js:3231jQuery.extend.ready @ jquery-latest.js:3443completed @ jquery-latest.js:3474
test.htm:182 0.0540225 109.2 14.59 Object {}
Сообщений: 6,450
Тем: 262
Зарегистрирован: Nov 2007
Репутация:
44,165
Ну вот, вы умножаете на Euro, который является объектом.
Так же выше ругается на:
[SRC="javascript"]document.getElementById('Euro').value()[/SRC]
Да и не нужно смешивать код, раз используете jQuery то и пишите $('#Euro').val()
Сообщений: 77
Тем: 14
Зарегистрирован: Jun 2015
Репутация:
-117
PHP код: <?php
$(document).ready(function () {
$.ajax({
type: "GET",
async : false,
url: "cb.xml",
dataType: "xml",
success: XmlKurs
});
function XmlKurs (xml) {
$(xml).find("Valute").each(function(){
if($(this).attr('ID')=='R01239') {
d=$(this).find("Value").text();
$('#Euro').val()
}
});
}
});
Cломался калькулятор совсем
Сообщений: 6,450
Тем: 262
Зарегистрирован: Nov 2007
Репутация:
44,165
Логично, ведь имелось ввиду так:
[SRC="javascript"]$("p").append($("#Euro").val() * $(this).find("Value"));[/SRC]
Но стоит учесть, что это умножение на строку. Данные полученные с DOM нужно привести к нужному типу, используя к примеру parseFloat(), parseInt(). Пример:
[SRC="javascript"]$.ajax({
url: 'cb.xml',
dataType: 'xml'
}).done(function (xml) {
$(xml).find('Valute').each(function () {
if ($(this).attr('ID') == 'R01239') {
var currency = parseFloat($(this).find('Value')
.text().replace(',', '.'));
var price = parseFloat($('#Euro').val());
$('p').append(price * currency);
}
});
});[/SRC]
|