1

我有一个 js 文件,其代码如下:

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中,我们编写了可以返回String的假设方法:

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 回答