jQuery и xml
Совсем измучился, нужна помощь
вот код -
$(document).ready(function(){
$.ajax({
type: "GET",
url: "011pags.xml",
dataType: "xml",
success: function(xml) {
$('#kod_tovar1').keyup(function(){
$(xml).find("product").each(function()
{
var id = $(this).attr('id')
if ($('#kod_tovar1').val() == id)
{
$('#nazvanie1').val($(this).attr('name'))
$('#kod_tovar1').val($(this).attr('id'))
$('#cena1').val($(this).attr('price'))
}
});
});
}
});
});
</script>
xml файл - <page addtobag="1" category="12" id="2"> <product height="450" id="48555" name="Набор" price="$0" width="450" x="429" y="0"> <subproduct id="75182" name="Сумка" price="$0"/> <subproduct id="19180" name="Ручка" price="$0"/> </product> </page> как видно у product есть дочка subproduct как вытащить id одновременно у родителя и дочки чтобы потом сравнить с тем что ввел пользователь. |
ну так запускай в цикле еще и цикл по детям у product.
лучше предобработай эти данные сначала, а не бегай по дереву xml при каждом отпускании кнопки:
$xml = $(xml);
// И формируй следующую структуру:
data = {};
data[id] = {};
data[id].name =
data[id].price =
Эти данные сохрани в переменной объявленной в $(document).ready и обработчик keyup выведи в ready изнутри той функции. |
Спасибо.
Можно поподробней по какому принципу формировать структуру data |
Я вроде написал:
пробегаешь по всем необходимым элементам(которые с id), имеешь им id, name, price. Будет такой: Код:
data[48555].name = 'Набор'
id = $(this).val();
if (id in data) {
$(что то).val(data[id].name);
}
|
Мысль уловил спасибо.
А как правильно задать значения для data |
$('[price]').each(function(){
var id = this.id;
data[id] = {};
data[id].name = $(this).attr('name');
// ...
});
|
Господи все в голове смешалось, пните чтоли.
почему здесь - $('[price]').each(function(){ |
изучайте основы джиквери !!!
Вам что надо - собрать данные с <product> и его <subproduct>. Чтобы не бегать по дереву, я их нахожу как имеющие атрибут price |
Спасибо
|
Что то у меня не получается
$(document).ready(function(){
$('#kod_tovar1').keyup(function(){
$.ajax({
type: "GET",
url: "011pags.xml",
dataType: "xml",
success: function(xml) {
$xml = $(xml);
$('[price]').each(function(){
var id = this.id;
data[id] = {};
data[id].name = $(this).attr('name');
data[id].price = $(this).attr('price');
id = $(this).val();
if (id in data) {
$('#nazvanie1').val(data[id].name);
$('#cena1').val(data[id].price);
}
});
}
});
});
});
|
$.ajax вытащи из keyup. Так примерно:
$(document).ready(function(){
var data = null;
var flag = false;
$.ajax({
type: "GET",
url: "011pags.xml",
dataType: "xml",
success: function(xml) {
flag = false;
// формируем data
flag = true;
}
);
$('#kod_tovar1').keyup(function(){
if (data && flag) {
// проверка текущего значения с теми, что в data
}
});
});
|
непойму почему alert на выходе дает [object Object] в 26 строчке
$(document).ready(function(){
var data = null;
var flag = false;
$.ajax({
type: "GET",
url: "011pags.xml",
dataType: "xml",
success: function(xml) {
flag = false;
$(xml).find('[price]').each(function()
{
var id = $(this).attr('id')
data = {};
data[id] = $(this).attr('id');
data[id].name = $(this).attr('name');
data[id].price = $(this).attr('price');
flag = true;
});
}
});
$('#kod_tovar1').keyup(function(){
if (data && flag) {
id = $(this).val();
alert (data);
if (id in data) {
$('#kod_tovar1').val(data[id]);
$('#nazvanie1').val(data[id].name);
$('#cena1').val(data[id].price);
}
}
});
});
|
А что должно давать?
var x = {}
alert(x)
|
Не пойму как правильно свойства задать здесь:
data[id] = {}; |
А это так и должно быть:
alert (data[id]); == > undefined |
data = {}
data[1] = {}
data[1].name = 'aaa';
data[1].price = '1000';
|
Толи я тупой толи ....
Совсем запутался, пните куда рыть
$(xml).find('[price]').each(function()
{
var id = $(this).attr('id');
//var name = $(this).attr('name');
//var price = $(this).attr('price');
//for(var id in data) {
data = {};
for(var id in data) {
data[id] = {};
//for(var id in data) {
data[id].name = $(this).attr('name');
data[id].price = $(this).attr('price');
}
console.log(data[id]);
});
|
ты data в цикле постоянно обнуляешь(data = {};).
Я выше показывал где объявлять, там где писал: var data = null; пиши data = {}; |
Спасибо.
В осле не работает, почемуто |
Все работает.
Огромное спасибо micscr за помощь. вот рабочий код:
$(document).ready(function(){
var data = null;
data = {};
var id = null;
data[id] = {};
var flag = false;
$.ajax({
type: "GET",
url: "011pags.xml",
dataType: "xml",
error: function(XMLHttpRequest, textStatus, errorThrown) {
alert("Error AJAX: " + textStatus + ", " + errorThrown);
},
success: function (xml) {
flag = false;
$(xml).find('[price]').each(function()
{
var id = $(this).attr('id');
data[id] = {};
data[id].id = $(this).attr('id');
data[id].name = $(this).attr('name');
data[id].price = $(this).attr('price');
});
flag = true;
}
});
$('#vvod_kod').keyup(function(){
if (data && flag) {
id = $(this).val();
if (id in data) {
var ids = 0;
//$('.quantity').css('background': '#f4fff5', 'padding-left': '3px', 'height': '15px', 'border': '1px');
$('#add_tb').append('<tr id="tr-' + ids + '"><td class="quantity"><img src="images/del.jpg" width="15" height="15" onclick="removeInput(\'' + ids + '\')" /></a><input size="10" type="text" name="kodtovar_' + ids + '" id="kodtovar_' + ids + '" value="'+ data[id].id +'"></td><td class="quantity"><input size="72" type="text" name="nazvanie_' + ids + '" id="nazvanie_' + ids + '" value="'+ data[id].name +'"></td><td class="quantity"><input size="9" type="text" name="stranica_' + ids + '" id="stranica_' + ids + '" value=""></td><td class="quantity"><input size="11" type="text" name="cena_' + ids + '" id="cena_' + ids + '" value="'+ data[id].price +'"></td><td class="quantity"><input size="11" type="text" name="kolihectvo_' + ids + '" id="kolihectvo_' + ids + '" value="1"></td><td class="quantity"><input size="5" type="text" name="summa_' + ids + '" id="summa_' + ids + '" value="'+ data[id].price +'"></td></tr>');
ids++;
}
}
});
});
function removeInput(id) {
$("#tr-"+id).remove();
}
Осталась одно еще проблемка <page addtobag="1" category="12" id="4"> <product height="450" id="44241" name="Надфель" price="$0" width="450" x="429" y="0"/> </page> <page addtobag="1" category="13" id="5"> <product height="450" id="99326" name="Ручка" price="$0" width="450" x="0" y="0"> <subproduct id="22098" name="Пенал" price="$0"/> </product> </page> Например вводим 22098 получаем id=5 page и умножаем на 2 вводим 44241 получаем id=4 page и умножаем на 2 вводим 99326 получаем id=5 page и умножаем на 2 Пока даже мыслей нет как можно раализовать данную штуку Пожалуйста набросайте план реализации |
Еще маленько доработал скрипт
var pric = data[id].price; price = pric.slice(1); удаляет знак доллара в price |
Цитата:
$xx = $(xml);
// ...
// и в обработчике нажатия кнопки:
var id = $(что то).val(); //22098
var res2 = null;
var res = $xx.find('#' . id);
if (res.length) {
res2 = res.closest('page').attr('id') * 2;
}
alert(res2);
|
И так и сюк кручу а он зараза выдает
или null или undefined |
Почемуто эта конструкция не срабатывает
if (res.length) {
res2 = res.closest('page').attr('id') * 2;
alert (res2);
}
|
Прикрутил калькулятор
при изменении количества выводится сумма <td class="quantity"><input maxlength="2" size="11" type="text" name="kolihectvo_' + ids + '" id="kolihectvo_' + ids + '" value="1" onkeyup="countSumma(\'' + ids + '\')"></td>
function countSumma(ids) {
var sum = $("#cena_"+ids).val() * $("#kolihectvo_"+ids).val();
$("#summa_"+ids).val(+ sum );
}
|
Вот так работает
var res = $xx.find('#' + id);
|
ни чего не понимаю
пытаюсь отправить форму
$('#check').submit(function() {
var aaa = $("kodtovar_" + ids).val();
$.post('check.php', {a: aaa}, function(data) {
$('#my_form').html(data);
});
});
check.php
<?php
//header("Content-type: text/html; charset=utf-8");
$a = $_POST[a];
echo $a;
?>
выводится пустая страница |
| Часовой пояс GMT +3, время: 12:38. |