在Jquery中的Ajax中完成代码后执行下一行

时间:2009-07-21 10:50:54

标签: jquery ajax

需要帮助!

我正在函数内执行ajax调用。 Ajax调用的结果是函数的返回值。

代码如下:

function tabstrip()
 {       
        $.ajax({
                  type: "POST",
                  url: "/WebService/MessageUnratedCount.asmx/GetMessageUnratedCount",
                  data: "{}",
                  contentType: "application/json; charset=utf-8",
                  dataType: "json",
                  success: function(msg) {
                    nUnratedCount=msg.d;               

                  }
              });
           return nUnratedCount;                                       
 }  

在从Web服务的ajax调用获得结果后,应返回nUnratedCount值。但是它会在执行ajax调用之前返回。 你能帮忙吗?

4 个答案:

答案 0 :(得分:8)

请记住,默认情况下,您的ajax请求不是同步调用,因此该函数将立即返回,而无需等待响应。我强烈建议的一个选项是使用asynch:false设置。

最好的选择是重构代码的结构并传入一个将在成功时调用的回调

e.g

   //calling code
   tabstrip( yourCallbackFunction )

    function tabstrip(callbackFn)
     {       
            $.ajax({
                      type: "POST",
                      url: "/WebService/MessageUnratedCount.asmx/GetMessageUnratedCount",
                      data: "{}",
                      contentType: "application/json; charset=utf-8",
                      dataType: "json",
                      success: callbackFn
                  });                                     
     }

    function yourCallbackFunction (data){
       //do something
    }

答案 1 :(得分:0)

我认为默认情况下ajax调用是异步的。来自jquery docs

  

async Boolean默认值:true   默认情况下,所有请求都是异步发送的(默认情况下设置为true)。如果需要同步请求,请将此选项设置为false。请注意,同步请求可能会暂时锁定浏览器,并在请求处于活动状态时禁用任何操作。

正如redsquare所指出的,重构可能比实际使用此选项更好。这取决于您当然的具体要求......

答案 2 :(得分:0)

由于请求是在异步模式下完成的(并且你真的不希望在同步模式下执行它,因为它在整个请求期间冻结了浏览器),你绝对拥有无法知道请求何时完成:

您使用

启动请求
$.ajax({
    ...
});
// "here"

但是请求是在后台完成的,当你到达“here”时就没有完成。

为了能够处理Ajax请求的“返回值”,您必须在success(或complete或任何您想要的事件中插入的函数内完成所有工作。 )事件。

而不是仅仅将msg.d放入nUnratedCount,这个函数真的必须使用它(例如,在HTML文档中显示它,或者你愿意用它做什么)一块数据)

答案 3 :(得分:0)

Ajax调用是异步调用,执行调用但解释下一条指令而不等待返回调用。

您需要将“async”变量设置为“false”才能执行同步调用,因此代码会在等待调用结果时停止执行。

http://docs.jquery.com/Ajax/jQuery.ajax#options

尝试添加此内容:

function tabstrip()
 {       
        $.ajax({
          async: "false"
        });

        $.ajax({
                  type: "POST",
                  url: "/WebService/MessageUnratedCount.asmx/GetMessageUnratedCount",
                  data: "{}",
                  contentType: "application/json; charset=utf-8",
                  dataType: "json",
                  success: function(msg) {
                    nUnratedCount=msg.d;               

                  }
              });

        $.ajax({
           async: "true"
        });

        return nUnratedCount;                                       
 }