我遇到了$.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的返回处理程序中的警告显示它已被分配。
答案 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"; });