如何使用Ajax内部调用JQuery在函数中获取返回值

How to get return value in a function with inside Ajax call - JQuery

本文关键字:函数 获取 返回值 JQuery 何使用 Ajax 内部 调用      更新时间:2023-09-26

这对你们中的少数人来说可能听起来很容易,但我不明白为什么我不能得到返回值,即使在修改了许多帖子之后:(

function getMessageCount() {
                    var count;
                    $.ajax({
                        type: "POST",
                        url: "http://localhost:43390" + "/services/DiscussionWidgetService.asmx/GetMessageCount",
                        dataType: "json",
                        contentType: "application/json; charset=utf-8",
                        success: function (data) {                            
                            count = data.d;
                        } //success
                    });
                    return count;
                }

现在,如果我调用var count = getMessageCount();它给了我不被玷污的:(而方法内部的计数是正确的,即服务运行良好。

我同意ahren的第一句话"这是因为$.ajax()调用是异步的。"

您可以尝试添加一个设置-async:false默认情况下为true。这使得调用同步。

您可以将代码编辑为:

function getMessageCount() {
                var count;
                $.ajax({
                    type: "POST",
                    url: "http://localhost:43390" + "/services/DiscussionWidgetService.asmx/GetMessageCount",
                    dataType: "json",
                    async:false,
                    contentType: "application/json; charset=utf-8",
                    success: function (data) {                            
                        count = data.d;
                    } //success
                });
                return count;
            }

这是因为$.ajax()调用是异步的。

如果您将代码编辑为类似以下内容:

function getMessageCount(callback) {
    var count;
    $.ajax({
       type: "POST",
       url: "http://localhost:43390" + "/services/DiscussionWidgetService.asmx/GetMessageCount",
       dataType: "json",
       contentType: "application/json; charset=utf-8",
       success: function (data) {                            
         count = data.d;
         if(typeof callback === "function") callback(count);
      } //success
   });
}

然后当你叫它:

getMessageCount(function(count){
  console.log(count);
});

使用回调:

调用函数,如:

getMessageCount(function(result) {
//result is what you put in the callback. Count in your case
});

和其他类似的:

function getMessageCount(callback) {
    var count;
    $.ajax({
        type: "POST",
        url: "http://localhost:43390" + "/services/DiscussionWidgetService.asmx/GetMessageCount",
        dataType: "json",
        contentType: "application/json; charset=utf-8",
        success: function (data) {                            
            count = data.d;
            if (callback) {
             callback(count);
            }
        } //success
    });
}

为什么不直接将其传递给函数?

function getMessageCount() {
  var count;
  $.ajax({
    type: "POST",
    url: "http://localhost:43390" + "/services/DiscussionWidgetService.asmx/GetMessageCount",
    dataType: "json",
    contentType: "application/json; charset=utf-8",
    success: function (data) {                            
       count = data.d;
       countMessages(count);
    } //success
   });
 }
function countMessages(counted) {var counted = counted; console.log(counted);}
function ajax_call(url,data){
      return $.ajax({ type: "POST",
        url: url,
        data: data,
        async:false,
        success: function(status){
        }
    }).responseText;
}

现在您将通过ajax调用

从服务器端获得响应文本