Случайная ошибка с одинаковым количеством звонков в ajax - PullRequest
0 голосов
/ 05 октября 2018

Странное поведение при вызове функции, содержащей ajax, из ajax "success".

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 error, или 3 ok 2 error.И консоль показывает это:

На этот раз не удалось 3 раза (из 5 вызовов)

На этот раз не удалось 2 раза (из 5 вызовов)

Если ошибка случайная, это очень странно ... то, что я думал, это чтобы перевести вызов между вызовами, потому что я где-то читал, что вызов повтора тот же самый jsonpCallback может создать некоторую проблему, правда ли это?

1 Ответ

0 голосов
/ 05 октября 2018

Хорошо, для тех, у кого такая же проблема, я нашел решение.Это путем установки заданного интервала между вызовами, и, следовательно, все они возвращают нормально.

Внутри первого успеха 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);
                  }
                }

И с этим поведение, чтоЯ надеялся:)

...