如何从包含jQuery.get()的JavaScript函数中获取返回值?

Amr*_*awy 3 javascript jquery

我有一个调用JQuery.get()的JavaScript方法,我想从它返回值到被调用函数..以下是代码:

function CheckExistance(userName) {
        $.get(
            "JQueryPage.aspx", { name: userName },
             function(result) {
                 if (result == "1") {
                     value = true;
                 }
                 else if (result == "0") {
                     value = false;
                 }
                 else if (result == "error") {
                     value = false;
                 }
             }
        );                
        return value;
    }
Run Code Online (Sandbox Code Playgroud)

我想return value;返回get()函数中设置的值...我知道这get()是异步操作,我想要一个解决方案吗?

Mat*_*att 7

你不能将值"返回"到被调用的函数中; 因为你已经意识到,AJAX调用是异步的.相反,您需要有效地延迟执行AJAX调用之后的代码; 将此代码放在callback函数中.

现在发生的是,这个代码在AJAX请求完成后执行,并且value可用.

function CheckExistance(userName, callback) {
        $.get(
            "JQueryPage.aspx", { name: userName },
             function(result) {
                 var value = false;

                 if (result == "1") {
                     value = true;
                 }


                 callback(value);
             }
        );                
    }
Run Code Online (Sandbox Code Playgroud)

然后您的功能可能在以前的位置:

function validateUserName() {
    var input = $('someField').val();
    var isUnique = CheckExistance(input);

    if (isUnique) {
       // whatever
    } else {
       alert("This username is already taken");
    };
};
Run Code Online (Sandbox Code Playgroud)

现在应该是:

function validateUserName() {
    var input = $('someField').val();

    CheckExistance(input, function (isUnique) {
       if (isUnique) {
          // whatever
       } else {
          alert("This username is already taken");
       };
    });
};
Run Code Online (Sandbox Code Playgroud)

  • +1表示正确答案.回调是要走的路. (2认同)