Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 05.12.2014, 00:14
Аватар для karakym
Профессор
Отправить личное сообщение для karakym Посмотреть профиль Найти все сообщения от karakym
 
Регистрация: 21.02.2010
Сообщений: 213

Общий вопрос о парсинге XML
Доброго времени суток, получил задачу сделать в таблице цен на сайте 3 валюты с возможностью их выбора (UAH, RUR, EUR)
Сам select с динамическим текстом сделал, но тут получается так, что основная валюта UAH и цены изначально задаются в ней, то есть нужно конвертировать в RUR и EUR, а из за того что экономика в стране (UA) "Скачет" ибо она не москаль, решил автоматизировать весь процесс!
Нашел API ПриватБанк, начал от туда парсить XML файлик методом jQuery.ajax
Но столкнулся с проблемой, по прямой ссылке jQuery не парсит XML файл по url, но если его скачать себе на сервер(указать локальный путь), то он отлично работает!
Вопрос простой: Почему? и как парсить напрямую?
Собс-но сам код:
jQuery(document).ready(function(){
  jQuery.ajax({
    type: "GET", // метод передачи данных, можно пропутсить - по умолчанию и так get
    url: "pubinfo.xml", // путь к файлу, который будем читать
    dataType: "xml", // тип данных, с котрыми работаем
    success: function(xml) { // переменная названа xml. ее можно назвать как либо по другому

  jQuery(xml).find('exchangerate').each(
    function()
      {					
        var ccy = jQuery(this).attr('ccy'),
        price = jQuery(this).attr('buy');
        jQuery('<div class="items"></div>').html('<span>'+ccy+'</span><br><span>'+price+'</span>').appendTo('#xml-data');
        /*Здесь хочу сделать: 
        1. Убрать в "price" все что после запятой вместе с ней 
        2. В переменных ниже price1... указаны цены (на товар) для 4-х тарифов
        их я хочу использовать что бы вывести стоимость в других валютах (RUR и EUR)
        Но тут остановочка, ведь не уверен правильно ли я делаю.
        */
        var price1 = 2500,
        price2 = 5000,
        price3 = 7500,
        price4 = 10000,
        rur = price1*price[0],
        eur = price1/price[1];
        alert('rub-'+rur+'; 'evro-'+eur)
    });			
    }
  });
});

Тут же еще несколько вопросов, собс-но поэтому тему создал в этом разделе:
2. Есть директория "src" в ней файл parse.js который подключен в файле index.htm который в свою очередь находится в корне так же как и папка, проблема в том что если в коде указать url: "/pubinfo.xml", то скрипт так же отказывается парсить файл!
3. И еще как убрать вывод доллара (довольно таки противная валюта) использовать не собираюсь.
4. Как видите в коде есть комментарии, буду благодарен если поможете с ними!
P.S. Сильно не пинайте я начинающий!
Ответить с цитированием
  #2 (permalink)  
Старый 05.12.2014, 05:40
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Для кроссдоменных запросов строронний сервер должен выставить особые http заголовки, разрешающие запрос. Возмощно приват банк их не выставляет. Убедись что запрос завершается успешно (смотри вкладку Сеть по F12. Путь правильно указал?
2. Файл тогда в корне сайта должен лежать, ибо слэш в начале адреса означает абсолютный путь.
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #3 (permalink)  
Старый 05.12.2014, 14:43
Аватар для karakym
Профессор
Отправить личное сообщение для karakym Посмотреть профиль Найти все сообщения от karakym
 
Регистрация: 21.02.2010
Сообщений: 213

Сменил код для удобства вытаскивания необходимых переменных:
$(document).ready(function()
	{
			$.get('pubinfo.xml', function(data)
			{
				a = $(data).find('exchangerate');
				
				prc = new Array();
				val = new Array();
				prc[0] = a[0].getAttribute("buy");
				val[0] = a[0].getAttribute("ccy");
				prc[1] = a[1].getAttribute("buy");
				val[1] = a[1].getAttribute("ccy");
				jQuery('<div class="items"></div>').html('<span>'+val[0]+'</span><br><span>'+prc[0]+'</span><br><span>'+val[1]+'</span><br><span>'+prc[1]+'</span>').appendTo('#xml-data');
Ответить с цитированием
  #4 (permalink)  
Старый 05.12.2014, 15:31
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

karakym, перед объявлением переменных надо ставить ключевое слово var. Ты даже элементарных вещей не знаешь, куда ты лезешь то.
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #5 (permalink)  
Старый 05.12.2014, 15:32
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от karakym
a[0]
А че за индексы? Откуда они берутся? Где описаны? Почему ноль, а не один? Или не пять?
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #6 (permalink)  
Старый 05.12.2014, 16:40
Аватар для karakym
Профессор
Отправить личное сообщение для karakym Посмотреть профиль Найти все сообщения от karakym
 
Регистрация: 21.02.2010
Сообщений: 213

Сообщение от danik.js Посмотреть сообщение
А че за индексы? Откуда они берутся? Где описаны? Почему ноль, а не один? Или не пять?
Ищет объект внутри
a = $(data).find('exchangerate');

А теперь получаем его нулевой (первый) атрибут
prc[0] = a[0].getAttribute("buy");
Ответить с цитированием
  #7 (permalink)  
Старый 05.12.2014, 22:50
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от karakym
А теперь получаем его нулевой (первый) атрибут
Какой нулевой атрибут? Ты атрибут не по индексу получаешь, а по имени (buy). А индекс тут идет в "массиве" элементов exchangerate.
a[0] - первый элемент <exchanerate>. Но почему первый-то, а не к примеру второй?
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #8 (permalink)  
Старый 05.12.2014, 23:21
Аватар для Vlasenko Fedor
Профессор
Отправить личное сообщение для Vlasenko Fedor Посмотреть профиль Найти все сообщения от Vlasenko Fedor
 
Регистрация: 13.03.2013
Сообщений: 1,572

язык php. Одиночка Static($xm) + XPATH (автор я )
simplexml_load_file вызывается один раз
function getValute($name)
{
    static $xml;
    if (!isset($xml)) {
        $file = 'http://pfsoft.com.ua/service/currency/?date=' . date('dmY');
        $xml = simplexml_load_file($file);
        if(!$xml) return;
    }
    $valute = $xml->xpath("/ValCurs/Valute[CharCode='$name']")[0];
    return $valute->Nominal . ' ' . $valute->Name . ' - ' . $valute->Value;
}

echo getValute('USD'), '<br>', getValute('EUR');

Добавлю. Результаты лучше кешировать сразу. Записывать в файл или базу

Последний раз редактировалось Vlasenko Fedor, 05.12.2014 в 23:35.
Ответить с цитированием
  #9 (permalink)  
Старый 06.12.2014, 00:18
Аватар для karakym
Профессор
Отправить личное сообщение для karakym Посмотреть профиль Найти все сообщения от karakym
 
Регистрация: 21.02.2010
Сообщений: 213

Сообщение от danik.js Посмотреть сообщение
Какой нулевой атрибут? Ты атрибут не по индексу получаешь, а по имени (buy). А индекс тут идет в "массиве" элементов exchangerate.
a[0] - первый элемент <exchanerate>. Но почему первый-то, а не к примеру второй?
Мне необходимы только 2 валюты, т.е Рубль и Евро, поэтому я беру a[0] и a[1]
Ответить с цитированием
  #10 (permalink)  
Старый 06.12.2014, 00:21
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

А где сказано что Рубль, это нулевой элемент? В документации так написано?
__________________
В личку только с интересными предложениями
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
XML и JavaScript - вопрос новичка KLD Общие вопросы Javascript 11 26.06.2014 16:06
Всплытие событий или что то не так... Кирюха =) jQuery 6 30.03.2013 12:56
Вопрос новичка XML "when test" gosha_kap (X)HTML/CSS 1 16.07.2009 12:30
Вопрос по XML Nikitos* Общие вопросы Javascript 20 18.02.2009 14:42
Как узнать какие ошибки произошли при парсинге xml файла faunder Events/DOM/Window 0 12.09.2008 14:17