从ajax“成功”调用包含ajax的函数时的奇怪行为。
jQuery.ajax(
{
url: urlWMS,
dataType: 'jsonp',
jsonpCallback: 'parseResponse',
error: function(xhr, status, error) {
console.log("err: " + error);
},
success: function(jsonp) {
if(jsonp.features.length > 0) {
objResultats = [];
for(i = 0; i < jsonp.features.length; i++) {
objResultats.push({
carrer: jsonp.features[i].properties.des,
numero: sNumero,
idnom: jsonp.features[i].id.split('.')[1],
punt: jsonp.features[i].geometry.coordinates[0][0].toString()
});
}
}
if(sNumero.length > 0) {
//buscar punts exactes
for(i = 0; i < objResultats.length; i++) {
getPoint(i, objResultats[i].idnom, objResultats[i].numero); <----- this is the function that makes another call that randomly returns error
}
}
}
函数“ getPoint”包含一个ajax调用:
Query.ajax(
{
url: urlWMS,
//type: 'GET',
dataType: 'jsonp',
jsonpCallback: 'parseResponse',
error: function(xhr, status, error) {
console.log("err: " + error);
},
success: function(jsonp) {
//strRespostaJSON = JSON.stringify(jsonp);
if(jsonp.features.length > 0) {
sPuntExacte = jsonp.features[0].geometry.coordinates.toString();
}
}
}
因此,我遇到的问题是函数“ getPoint”返回了5个点,但有时它会随机返回4 ok和1错误,或3 ok 2错误。 控制台显示如下:
This time fail 3 times(of 5 calls)
This time fail 2 times(of 5 calls)
如果错误是随机的,那将非常奇怪...我认为应该在两次调用之间进行睡眠,因为我读过某个地方重复调用相同的jsonpCallback会造成一些问题,这是真的吗?
答案 0 :(得分:0)
好吧,对于那些同样的问题,我找到了解决方案。通过设置两次调用之间的settimeout间隔,因此所有调用都返回确定。
在第一个ajax成功之外,新代码是:
if(sNumero.length > 0) {
//buscar punts exactes
for(i = 0; i < objResultats.length; i++) {
var tick = function(i) {
return function() {
getPuntCarrerNumero(i, objResultats[i].idnom, objResultats[i].numero);
console.log("punt i=" + i + " - idnom=" + objResultats[i].idnom + " actualitzat");
}
};
setTimeout(tick(i), 500 * i);
}
}
此行为正是我所希望的:)