Javascript 从jQuery.Get嵌套函数中获取var
我想:Javascript 从jQuery.Get嵌套函数中获取var,javascript,jquery,ajax,return,Javascript,Jquery,Ajax,Return,我想: function getUserHours(tyPe, tarGet){ $.get('/activities/search', { 'type': tyPe }, function(data){ var hourResultData = jQuery.parseJSON(data); var registeredHours = 0; for (var i in hourResultData.activities){
function getUserHours(tyPe, tarGet){
$.get('/activities/search', { 'type': tyPe },
function(data){
var hourResultData = jQuery.parseJSON(data);
var registeredHours = 0;
for (var i in hourResultData.activities){
registeredHours += parseFloat(hourResultData.activities[i].hours);
}
$(tarGet).empty().append(registeredHours);
return registeredHours;
});
}
要提醒registeredHours直接返回数据,只有在关闭asynchronous GET for AJAX时才有效:
alert( getUserHours('r', '#reg-hours'));
不建议这样做,因为在您完成请求之前,浏览器将一直阻塞。相反,您应该通过使用函数回调继续遵循异步编程模型:
$.ajax({
type: 'GET',
url: '/activities/search',
data: { 'type': tyPe },
async : false,
success : function() { }
});
当数据准备就绪时,将调用您试图从中返回的回调函数,这意味着数据是异步发送的 这意味着您不能直接从
getUserHours
函数返回数据。您需要一个回调函数来在数据准备就绪时启动
大概是这样的:
$.ajax({
type: 'GET',
url: '/activities/search',
data: { 'type': tyPe },
async : false,
success : function() { }
});
function getUserHours(tyPe, tarGet, callback)
{
$.get('/activities/search', { 'type': tyPe },
function(data)
{
var hourResultData = jQuery.parseJSON(data);
var registeredHours = 0;
for (var i in hourResultData.activities){
registeredHours += parseFloat(hourResultData.activities[i].hours);
}
$(tarGet).empty().append(registeredHours);
if($.isFunction(callback))
callback(registeredHours);
});
}
getUserHours('r', '#reg-hours', function(hours) {
alert(hours);
});
然后在getUserHours
中发送一个匿名函数作为参数
function getUserHours(tyPe, tarGet, callback){
$.get('/activities/search', { 'type': tyPe },
function(data){
var hourResultData = jQuery.parseJSON(data);
var registeredHours = 0;
for (var i in hourResultData.activities){
registeredHours += parseFloat(hourResultData.activities[i].hours);
}
$(tarGet).empty().append(registeredHours);
callback(registeredHours); // callback, send back data to callback function
});
}
jQuery1.5将通过新的
Deffered
和promise方法添加一些额外的实现方法。
getUserHours('r', '#reg-hours', function(data) {
alert(data);
});