1

JQuery 関数:

function readXMLData(tagName){
    var result;
    function loadfail(){
        alert("Error");
    }

    function parse(document){
        $(document).find(tagName).each(function(){
            result = $(this).find('value').text();
        });
    }

    $.ajax({
        type: "GET",
        url: 'config.xml',
        dataType: 'xml',
        success: parse,
        error: loadfail
    });

    //alert(result);
    return result;
}

XML ファイル:

<?xml version="1.0" encoding="UTF-8" ?>
<config>
    <host-prefix>
        <value>myprefix</value>
    </host-prefix>

    <host-url>
        <value>localhost</value>
    </host-url>

    <image-path>
        <value>imagePath</value>
    </image-path>
</config>

私はこのxmlファイルを持っており、私はこの関数をreadXMLData("host-prefix").

問題:上記のように関数を呼び出すと、関数内undefinedのコメントを外すとアラートが表示されますが、関数は戻ります(真の結果)。すべてが正常に動作します。コードからアラート (結果) を削除する必要があります。機能は引き続き正常に動作します。alert(result)readXMLDataundefinedmyprefix

助けはありますか?

4

2 に答える 2

1

readXMLData()次のように関数を呼び出します。ajax は非同期であるため、すぐに結果が得られるわけではないため、「未定義」と警告します。

var result;
var requiredTagName;

function readXMLData(tagName)
{
         requiredTagName  = tagName;

         $.ajax({
            type: "GET",
            url: 'config.xml',
            dataType: 'xml',
            success: parse,
            error: loadfail
        });
}
   function loadfail()
   {
       alert("Error");
   }

   function parse(document)
   {
        $(document).find(requiredTagName).each(function(){
             result = $(this).find('value').text();
        });
   }
于 2012-06-20T12:06:00.527 に答える
0

ajax 関数からデータを返そうとしないでください。Ajax は定義上、非同期であるため、結果がいつ返されるかはわかりません。また、返されるまで実行は停止しません。したがって、コールバックを呼び出すことを計画する必要があります...例:

function readXMLData(tagName, callback){
    var result;

    if(typeof callback != 'function) {
       return false;
    }

    function loadfail(){
        alert("Error");
    }

    function parse(document){
        $(document).find(tagName).each(function(){
            result = $(this).find('value').text();
            callback(result);
        });
    }

    $.ajax({
        type: "GET",
        url: 'config.xml',
        dataType: 'xml',
        success: parse,
        error: loadfail
    });

    // we return true or false which indicates that we fired off the request ok
    // and nothing more.
    return true;
}

したがって、結果を受け取ってそれを処理する次の関数を呼び出す必要があります。

readXMLData("host-prefix", yourNextFunction);
于 2012-06-20T12:04:21.957 に答える