我有一个xml文件,我想使用jquery从该文件中搜索一些值,但是我在函数内部和函数外部的值是不同的,请指向正确的方向。这是xml文件
<?xml version="1.0" encoding="UTF-8"?>
<plist version="1.0">
<dict>
<key>ID</key>
<string>B0A6EF3C-221F-4918-89C2-340B05F6A7AD</string>
<key>Name</key>
<string>name</string>
<key>Items</key>
<array>
<dict>
<key>Mode</key>
<integer>1000</integer>
<key>background</key>
<string>RGBA:0.000000,1.000000,1.000000,1.000000</string>
<key>Enabled</key>
<true/>
</dict>
<dict>
<key>Mode</key>
<integer>1000</integer>
<key>background</key>
<string>RGBA:0.000000,1.000000,1.000000,1.000000</string>
<key>Enabled</key>
<true/>
</dict>
</array>
</dict>
</plist>
我使用的代码是
$.post("demo.xml",{},function(xml){
$('array',xml).each(function(i) {
$(this).find('dict').each(function(){
var valueError = findvalue($(this),'Mode');
alert(valueError);
});
});
});
function findvalue(tag,searchkey)
{
$(tag).find('key').each(function(){
key = $(this).text();
value = $(this).next().text();
//alert("inside = "+ value)
if(key == searchkey)
{
alert("key = "+key + " searchkey = " + searchkey +" value = " +value)
return value;
}
else
{
return "No Match";
}
});
}
当在findvalue函数内部进行控制时,它会打印正确的值,但是当它转到Calling函数并打印返回值时,在这种情况下是valueError,它打印未定义
答案 0 :(得分:1)
它返回undefined因为你从回调函数中返回值,所以main函数本身没有返回值。
您需要将返回值设置为函数中的变量并从main函数返回该值:
function findvalue(tag, searchkey) {
var returnValue = false;
$(tag).find('key').each(function(){
key = $(this).text();
value = $(this).next().text();
if(key == searchkey) {
alert("key = " + key + " searchkey = " + searchkey + " value = " + value);
returnValue = value; // assign to the parent functions variable
return value; // only returns to the callback function
} else {
returnValue = "No Match"; // same as above
return "No Match";
}
});
return returnValue; // this will allow you to access that value now
}
在循环中返回'No Match'似乎很奇怪,也许您应该看一下简单地删除else语句并让父函数只返回false
(默认情况下,如上所定义)找到匹配项,并在显示结果时输出“No Match”(可能是您输出findvalue()
的结果的位置)。