jQuery函数执行顺序

时间:2012-07-23 15:59:10

标签: javascript jquery

我遇到了$.get()函数的jQuery执行顺序问题,或者可能缺乏理解。我想从数据库服务器中检索一些信息,以便在$.ready()函数中使用。众所周知,当get返回时,它会将数据传递给返回处理程序,该处理程序对数据执行某些操作。在我的情况下,我想为在ready处理函数内声明的变量赋值。但问题是,$.get()的返回处理程序直到ready退出后才会执行。我想知道是否(a)我做得对吗/是否有更好的方法或者是否(b)有一种解决方法(即强制get return handler立即执行或其他一些我不知道的修复的)。我有一种感觉,这是关于JavaScript的一些关闭事项。

根据要求,我会发布一个我的意思的例子:

$(function() {
    var userID;

    $.get(uri, function(returnData) {
                   var parsedData = JSON.parse(returnData);
                   userID = parsedData.userID;
               });
  });

正如你所看到的,我正在准备一个变量。然后使用对数据库的get调用来检索所需的数据。然后我解析返回的JSON并将userID分配给之前声明的变量。我用几个警报测试了它。 get之后的警报显示userID为undefined但是get的返回处理程序中的警告显示它已被分配。

5 个答案:

答案 0 :(得分:3)

$ .get()是异步的。您必须使用回调来填充变量并在请求完成后执行计算。类似的东西:

$(document).ready(function(){

    $.get( "yourUrl", function( data, textStatus, jqXHR ) {
        var myData = data; // data contains the response content
        // perform your processing here...
        registerHandlers( myData ); // you can only pass "data" off course...
    });

});

// your function to register the handlers as you said you need to.
function registerHandlers( data ) {
    // registering handlers...
}

答案 1 :(得分:3)

$.get是一个ajax请求。 AJAX中的 A 代表异步,因此脚本不会等待此请求完成,而是继续使用您的代码。

您可以使用完整回调,也可以使用$.ajax并将 async 设置为 false 以执行同步请求。

答案 2 :(得分:1)

$ .get()函数执行异步httprequest,因此只要此请求返回某些内容,就会执行回调函数。您应该在$ .ready()

之外处理此回调

也许如果你准确地解释你想做什么,它会更容易帮助!

答案 3 :(得分:0)

您正在寻找类似的东西:

$(document).ready(function(){
    var variable1, variable 2;
    $.get('mydata.url', function(data){
        variable1 = data.mydata1;
        variable2 = data.mydata2;
    });
});

如果先声明变量,则可以在get调用中设置它们的值。您可以在get处理程序的末尾添加一个函数调用,以使用这些值调用单独的函数?没有某种例子,很难再深入细节了。

答案 4 :(得分:0)

如果没有看到完整的代码,我猜你应该在 $.ready之外声明你的变量;在ready初始化初始页面加载;然后从get回调处理程序更新它。

例如

var x = ""; // declaration

$(document).ready(function() { x = "initial value"; });

$.get(...).success(function() { x = "updated from ajax"; });