ajax可以获取作用域的值吗,jQuery .ajax()回调作用域混淆

它看起来像这里的问题是,你希望返回的值被附加到rend字符串中的时间为下一个AJAX调用。这不会发生,因为调用是一个同步过程,但获取返回值是异步的。相反的:

AJAX Post 1 (rend='')

rend += 'id1,'

AJAX Post 2 (rend='id1,')

rend += 'id2,'

AJAX Post 3 (rend='id1,id2,')

// etc

的序列将最喜欢去的东西,如:

AJAX Post 1 (rend='')

AJAX Post 2 (rend='')

AJAX Post 3 (rend='')

// etc

// ... data is returned, not necessarily in order

rend += 'id2,'

rend += 'id1,'

rend += 'id3,'

// etc

为了让每个随后的AJAX调用知道什么是从服务器被以前返回,你不得不链这些呼叫,以便在前一个呼叫完成之前不会进行下一个AJAX呼叫。你可以用递归做到这一点,是这样的:

function fill_div(id, count) {

var rend = "";

var filler = $('#'+id);

// inner function for recursion

function doAjaxCall(i) {

$.ajax({'type':'POST',

'url':'/ads/render/',

'dataType':'json',

'data':{'rendered': rend})

.success(function(data){

filler.append('

rend+=data.mid.toString()+",";

_fill_ad(data);

// now send the next call

if (i < count) {

doAjaxCall(i+1);

}

});

}

// kick off the series

doAjaxCall(0);

}