2010-10-21 45 views
1

如果成功函數在加載XML後正確運行,那麼我已成功加載xml並且一切正常。但是我想在onChange事件發生在選擇框(它改變tmpproj值)之後獲得屬性的值。 當我嘗試訪問成功函數checkimgs()它說$(xml)沒有定義。如何在選擇更改後查詢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

在此事件處理程序:

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

您呼叫的checkimgs直接功能hout傳入任何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); 
}); 
+0

,謝謝你的提示響應標誌。我也試圖避免每次更改選擇時都調用該文件。我可以讓它像那樣工作,我只是不想要它。 – arakno 2010-10-21 13:42:36

+0

看到我編輯的答案。 – 2010-10-21 14:06:10

+0

精湛!奇蹟般有效。 thx – arakno 2010-10-21 14:51:12