1

次のようなコードを持つjsファイルが1つあります。

function postResponse(url1,param1)
{
var url = intranetUrl + encodeURI(url1);

 var xhr = new XMLHttpRequest();
    xhr.open('POST', url, true);
    xhr.onload = function(e)
    {
        if (this.status == 200)
        {
            genericRes = this.responseText;
            console.log("inside fun:"+genericRes);
            return genericRes;
        }
        alert("!!!"+this.status);
    };

    xhr.send(param1);


}

今、別のファイルから、このファイルの上記のファイルにインポートしたこの関数にアクセスし、次のように関数を呼び出したいと思います。

<script type="text/javascript">

        var resss = postResponse("myURL","ACC|^ALL|^M|^|$");
        alert("genericRes"+genericRes);
        console.log("genericRes>>>"+genericRes);
        console.log("resss>>>"+resss); 

    </script>

しかし、ここではgenericResとresssの値を未定義として取得し、console.logが最初に出力され、次に console.log("inside fun:"+genericRes); ここに出力され、正しい出力が得られましたが、コードを呼び出すと未定義になります。

java では、次のように文字列を返す想定メソッドを記述します。

public String myMethod()
{
      str = "MyString";
      return str;
}

そのメソッドを次のように呼び出します。

String str1 = myMethod();

しかし、jqueryでこれを行う方法は?

任意の提案をいただければ幸いです。前もって感謝します

4

1 に答える 1

3

注意深く見ると、次のように別の関数を定義しています。

function(e) //<-- this is the another function
{
    if (this.status == 200)
    {
        var genericRes = this.responseText;
        console.log("inside fun:"+genericRes);
        return genericRes; //<-- this only applies to this function
    }
    alert("!!!"+this.status);
};

そのため、ブラウザであるの呼び出し元にその値が返されxhr.onload、ブラウザは戻り値に対して何もしません。

さらに、非同期操作から実際に戻ることはできず、コールバックを使用する必要があります。

そう:

function postResponse(url1, param1, callback) { // <-- take a callback parameter
    var url = intranetUrl + encodeURI(url1);
    var xhr = new XMLHttpRequest();
    xhr.open('POST', url, true);
    xhr.onload = function(e) {
        if (this.status == 200) {
            var genericRes = this.responseText;
            callback( genericRes ); // <-- call the callback
        }
    };
    xhr.send(param1);
}

次に、コードで:

postResponse("myURL", "ACC|^ALL|^M|^|$", function(result) {
    alert(result); //Result is only available here. In this anonymous function defined inline. Yes.
});
于 2012-08-25T09:53:15.987 に答える