在ajax中调用次数相同的随机错误

时间:2018-10-05 06:21:27

标签: jquery ajax callback jsonp

从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会造成一些问题,这是真的吗?

1 个答案:

答案 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);
                  }
                }

此行为正是我所希望的:)