函数在javascript中获取未定义的值

时间:2014-03-13 21:36:44

标签: javascript jquery

我有一个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,它打印未定义

1 个答案:

答案 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()的结果的位置)。