3 个答案:
答案 0 :(得分:0)
您有一个条件,您必须在执行下一个AJAX请求之前完成您的AJAX请求。
要使其有效,请执行以下两个选项之一:
从success函数进行后续ajax调用,以确保在上次调用完成时发生下一次调用。
使AJAX调用同步:
醇>
$.ajax({
async: false,
...
}
答案 1 :(得分:0)
解决了问题!
// global variable to check whether the fillStateList already running (waiting for response) or not
var IsBindingState = false;
// An extension method to fillStateList function to synchronize the requests (not to call fillStateList directly, use this method)
function fillStateListSync(cid) {
if (!IsBindingState) {
fillStateList(cid);
}
else {
var loop = setInterval(function () {
if (!IsBindingState) {
fillStateList(cid);
clearTimeout(loop);
}
}, 100);
}
}
// function to bind state list
function fillStateList(cid) {
IsBindingState = true;
$.ajax(
{
type: "POST",
contentType: "application/json; charset=utf-8",
url: someurl,
data: "{'countyId': '" + cid + "'}",
dataType: "json",
success: function (data) {
if (data.d.length > 0) {
//alert('r- ' + stateId); //
// code to bind select list
}
IsBindingState = false;
},
error: function (result) {
IsBindingState = false;
}
});
}
答案 2 :(得分:0)
如果alert从两个不同的来源异步调用,例如,console.log可能会破坏某些内容,例如来自服务器的响应。
警报也不是调试数据的最佳方式。
请改用$.when(fillStateList(12), fillStateList(13), fillStateList(14), fillStateList(15))
.then(function() {
alert("all done");
});,这是一种更好的调试数据的方法。你可以传递一个对象或一个数组,开发者控制台(例如chrome或firefox的firebug?)会很好地显示它
要链接您的ajax请求,您可能希望使用Deferred。
$.when
这里我使用done(请参阅Docs)来链接延期。
您也可以使用$.when( $.ajax( "/page1.php" ), $.ajax( "/page2.php" ) ).done(function( a1, a2 ) {
var data = a1[ 0 ] + a2[ 0 ]; // a1[ 0 ] = "Whip", a2[ 0 ] = " It"
if ( /Whip It/.test( data ) ) {
alert( "We got what we came for!" );
}
});回调中的参数,其中每个参数都是延迟传入的时间。请参阅我直接从jquery复制的示例
a1
此处a2是对第一个ajax请求的引用,{{1}}是对第二个ajax请求的引用。
在这里你还可以看到一个人没有成功......