Общий вопрос о парсинге 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. Сильно не пинайте я начинающий!:stop: |
Для кроссдоменных запросов строронний сервер должен выставить особые http заголовки, разрешающие запрос. Возмощно приват банк их не выставляет. Убедись что запрос завершается успешно (смотри вкладку Сеть по F12. Путь правильно указал?
2. Файл тогда в корне сайта должен лежать, ибо слэш в начале адреса означает абсолютный путь. |
Сменил код для удобства вытаскивания необходимых переменных:
$(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'); |
karakym, перед объявлением переменных надо ставить ключевое слово var. Ты даже элементарных вещей не знаешь, куда ты лезешь то.
|
Цитата:
|
Цитата:
a = $(data).find('exchangerate'); А теперь получаем его нулевой (первый) атрибут prc[0] = a[0].getAttribute("buy"); |
Цитата:
a[0] - первый элемент <exchanerate>. Но почему первый-то, а не к примеру второй? |
язык php. Одиночка Static($xm) + XPATH (автор я :haha: )
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'); Добавлю. Результаты лучше кешировать сразу. Записывать в файл или базу |
Цитата:
|
А где сказано что Рубль, это нулевой элемент? В документации так написано?
|
Часовой пояс GMT +3, время: 14:28. |