0

我对$.get()函数的 jQuery 执行顺序有问题,或者可能缺乏理解。我想从数据库服务器中检索一些信息以在$.ready()函数中使用。众所周知,当 get 返回时,它会将数据传递给返回处理程序,该处理程序对数据进行处理。在我的情况下,我想为在就绪处理函数中声明的变量分配一些值。但问题是,$.get()在 ready 退出之前,返回处理程序不会执行。我想知道(a)我这样做是否正确/是否有更好的方法,或者(b)是否有解决方法(即强制 get return 处理程序立即执行或其他一些我不知道的修复的)。我有一种感觉,这是一些关于 JavaScript 的闭包。

根据要求,我将发布一个示例来说明我的意思:

$(function() {
    var userID;

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

如您所见,我正在准备好声明一个变量。然后使用对数据库的 get 调用来检索所需的数据。然后我解析返回的 JSON 并将 userID 分配给之前声明的变量。我已经用几个警报对其进行了测试。get 之后的警报将 userID 显示为未定义,但 get 的返回处理程序中的警报显示它已被分配。

4

5 回答 5

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...
}
于 2012-07-23T16:04:07.003 回答
3

$.get是一个ajax请求。AJAX 中的 A代表asynchronous,因此脚本不会等待此请求完成,而是会进一步处理您的代码。

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

于 2012-07-23T16:04:11.537 回答
1

$.get() 函数执行一个异步 httprequest,所以只要这个请求返回一些东西,回调函数就会被执行。您应该在 $.ready() 之外处理此回调

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

于 2012-07-23T16:04:01.270 回答
0

您是否正在寻找类似的东西:

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

如果您首先声明变量,那么您可以在 get 调用中设置它们的值。您可以在 get 处理程序的末尾添加一个函数调用来使用这些值调用一个单独的函数吗?如果没有某种示例,很难详细说明。

于 2012-07-23T16:06:54.373 回答
0

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

例如

var x = ""; // declaration

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

$.get(...).success(function() { x = "updated from ajax"; });
于 2012-07-23T16:08:50.723 回答