我想使用Ajax检查XML字符串(" data
")是否在" voteBy
"下包含某个值,例如名称" John Doe
"。
如果是,那么我想显示警报,如果没有则显示另一个警报。
背后的想法是我想稍后使用jQuery做一些事情,但前提是在xml字符串中找不到搜索词。
我尝试了下面的Ajax调用的成功函数来获取这个XML字符串。在这种情况下,它应该警告"发现"因为搜索词出现在XML字符串中,但我的方法并没有返回任何内容。
有人可以告诉我这里的错误吗? 注意:xml的数据可能会有所不同,因此某个项目可能会有更多或更少或没有投票。
我的XML如下所示(示例数据,缩短):
<ranks>
<itemDetails>
<itemID>1</itemID>
<title>Test item</title>
<details><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit...</p></details>
<lastUpdate>Added</lastUpdate>
<modTime>Saturday, 23 August 2014</modTime>
<modBy>Someone</modBy>
<comments>
<commentID>1</commentID>
<comment>Some comment</comment>
</comments>
<comments>
<commentID>2</commentID>
<comment>Another comment</comment>
</comments>
<votes>
<voteBy>John Doe</voteBy>
</votes>
<votes>
<voteBy>Jane Doe</voteBy>
</votes>
</itemDetails>
</ranks>
我的jQuery(仅限成功函数,缩短) - 这里的数据是我的xml字符串:
$.ajax({
// ...
success:function(data) {
if(!$(data).find('voteBy').text() == 'John Doe') {
alert('not found');
} else {
alert('found');
}
}
});
非常感谢你提供任何帮助,蒂姆。
答案 0 :(得分:2)
一种方法是将.each
元素用于xml节点:
var yourXML;
function search_xml(string_for_search){
$.ajax({
type:"GET",
url: "xml_file.xml",
dataType: "xml",
success: function(xml){
$(xml).find('voteBy').each(function(){
if($(this).text() == string_for_search) alert ('found :)');
else alert ('not found ! :(');
});
}
});
}
search_xml("John Does");
另一种方式:使用.filter
和.find
var yourXML;
function search_xml(string_for_search){
$.ajax({
type:"GET",
url: "xml_file.xml",
dataType: "xml",
success: function(xml){
// Filter
myXML = $(xml).find("itemDetails").filter(function() {
return $(this).find('voteBy').text() == string_for_search;
});
// Store a string with your keywords
var output = myXML.children().map(function() {
return this.tagName + '=' + $(this).text();
}).get().join(' ');
alert(output);
}
});
}
search_xml("John Doe");