一个函数里面的Jquery Ajax问题

时间:2011-06-29 17:43:34

标签: jquery ajax

此代码始终返回“0”:

function myFunc() {

var str = "0";

JQuery.ajax({
      type: "POST",
      url: "test.aspx/testMethod",
      data: "{}",
      dataType: "json",
      contentType: "application/json; charset=utf-8",
      success: function(msg) {

       alert(str); //here shows my value from my method
       str = msg.d;

      }

});

alert(str); //here shows "0";

return str;

但我的js函数的返回值始终为“0”。 我认为JavaScript在ajax完成之前返回str。我能做什么?

}

1 个答案:

答案 0 :(得分:2)

你是对的。在收到服务器的回复之前,正在调用警报。如果您不希望立即返回.ajax调用,则可以将async设置为false。这有用吗?

function myFunc() {

var str = "0";

JQuery.ajax({
      type: "POST",
      async: false,
      url: "test.aspx/testMethod",
      data: "{}",
      dataType: "json",
      contentType: "application/json; charset=utf-8",
      success: function(msg) {

       alert(str); //here shows my value from my method
       str = msg.d;

      }

});

alert(str); //here shows "0";

return str;
}

我应该指出,你这样做的方式可能不是最合适的。您正在尝试创建一个同步工作的函数,因为这很简单,而且您已经习惯了。但是,它违背了异步请求的整个目的,并不能很好地适应Javascript的范例。以下是jQuery文档对此的说法:

  

请注意,同步请求可能会暂时锁定浏览器,并在请求处于活动状态时禁用任何操作。

最好有一个回调函数,它使用你从请求中获得的值。