Как запросить атрибут XML после изменения выбора - PullRequest
1 голос
/ 21 октября 2010

Я успешно загрузил XML и все работает нормально, если функция успеха запускается сразу после загрузки XML. Но я хотел получить значение атрибута после того, как событие onChange происходит в поле выбора (которое изменяет значение tmpproj). Когда я пытаюсь получить доступ к функции успеха, checkimgs () говорит, что $ (xml) не определен.

Это, вероятно, довольно простое решение, но я слишком слеп, чтобы это увидеть.

var tmpproj = '02064';
var fileurl = 'menu.xml';

$.ajax({
    url: fileurl,
    type: "GET",
    dataType: "xml",
    success: checkimgs,
    error: error_func
 });


// Callback results if error
function error_func(result) {
    alert(result.responseText);
}

// Callback if Success
function checkimgs(xml) { 
    $(xml).find("item[projn="+tmpproj+"]").each(function()
    {           
        alert ($(this).attr("projn"));
    });
} 

XML выглядит так:

<menu nome="stuff" tag="ldol">
  <item projn="02064" nome="asdf" msg="ggg">
   <foto nome=""/>          
  </item>
  <item projn="06204" nome="xxx" msg="xxxd" />
</menu>

Звонки на событие onchange:

$('#selctbox').change(function () {
    tmpproj = $('#projlist option:selected').val();
    checkimgs();
})

1 Ответ

1 голос
/ 21 октября 2010

В этом обработчике событий:

$('#selctbox').change(function () {
    tmpproj = $('#projlist option:selected').val();
    checkimgs();
});

Вы вызываете функцию checkimgs напрямую, без передачи каких-либо данных XML в качестве параметра, поэтому вы получаете ошибку $(xml) is not defined.Вам нужно вызвать функцию $.ajax в вашем обработчике событий изменения:

$('#selctbox').change(function () {
    tmpproj = $('#projlist option:selected').val();
    $.ajax({
        url: fileurl,
        type: "GET",
        dataType: "xml",
        success: checkimgs,
        error: error_func
    });
});

Редактировать : в ответ на ваш комментарий - чтобы не получать файл при каждом изменении, просто сохранитеXML-ответ в переменной при первом получении:

var tmpproj = '02064';
var fileurl = 'menu.xml';
var xmlContent = '';

$.ajax({
    url: fileurl,
    type: "GET",
    dataType: "xml",
    success: checkimgs,
    error: error_func
 });


// Callback results if error
function error_func(result) {
    alert(result.responseText);
}

// Callback if Success
function checkimgs(xml) { 

    // Store the xml response
    if(xmlContent == '')
        xmlContent = xml;

    $(xml).find("item[projn="+tmpproj+"]").each(function()
    {           
        alert ($(this).attr("projn"));
    });
}

Затем в выбранном вами обработчике изменений:

$('#selctbox').change(function () {
    tmpproj = $('#projlist option:selected').val();
    checkimgs(xmlContent);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...