| 
		
	
	
	
		
	Сообщений: 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]
 |