Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 01.12.2015, 19:38
Аватар для sovsem-nub
Профессор
Отправить личное сообщение для sovsem-nub Посмотреть профиль Найти все сообщения от sovsem-nub
 
Регистрация: 15.10.2014
Сообщений: 255

запрос с callback, почему во второй раз возвращает 2 ответа?
делаю расчет доставки почтой России вроде все нормально.
отправил запрос, получил список городов (список появился в селекте).
потом отправил этой же функцией рассчет стоимости, а он мне опять помимо ответа возвращает этот список городов. функция почему-то запускается 2 раза. и список городов тогда не появляется.

<!DOCTYPE HTML>
<html>
<head>
  <meta charset="utf-8">
</head><body>

Точка прибытия: <select id="arrivalPoint"></select>

<script>
// This line taken from J50Npi.min.js (within this repo)
var J50Npi={currentScript:null,getJSON:function(b,d,h){var g=b+(b.indexOf("?")+1?"&":"?");var c=document.getElementsByTagName("head")[0];var a=document.createElement("script");var f=[];var e="";this.success=h;d.callback="J50Npi.success";for(e in d){f.push(e+"="+encodeURIComponent(d[e]))}g+=f.join("&");a.type="text/javascript";a.src=g;if(this.currentScript){c.removeChild(currentScript)}c.appendChild(a)},success:null};





          



var url = 'http://emspost.ru/api/rest/?method=ems.get.locations&callback=arrivalPointRender';
var data = {plain: "true", type:"russia"};

// We need a function callback to be executed after the response is received
var arrivalPointRender = function(data){
    var html = '', selected = false;

       for(var i = 0; i < data.rsp.locations.length; i++){
      
         if(data.rsp.locations[i].type=="cities") {data.rsp.locations[i].type="(город)"};
            if(data.rsp.locations[i].type=="regions") {data.rsp.locations[i].type="(регион)"};
       
           html += '<option value="'+data.rsp.locations[i].value+'"'+(selected?'':' selected')+'>'+data.rsp.locations[i].name+' '+data.rsp.locations[i].type +'</option>'
        selected = false    
                                                         
     }
 document.getElementById('arrivalPoint').innerHTML = html;   
    }
J50Npi.getJSON(url, data, arrivalPointRender);




var urlCalcPost = 'http://emspost.ru/api/rest?method=ems.calculate&callback=CalcPost&from=city--moskva&to=region--omskaja-oblast&weight=1.5';
var dataCalcPost = {plain: "true"};
var CalcPost = function(dataCalcPost){ 
 console.log(dataCalcPost.rsp);
  alert(" почему 2 алерта?" );
};
J50Npi.getJSON (urlCalcPost, dataCalcPost, CalcPost);

</script>

</body>
</html>



в консоле такая запись {locations: Array[197], stat: "ok"}
{price: "950", stat: "ok", term: Object {...}}

то есть получил массив городов и стоимость доставки. вот тут код http://jsfiddle.net/tL532q27/3/

до этого делал деловые линии точно так же никаких проблем не было. Замучался уже.
Ответить с цитированием
  #2 (permalink)  
Старый 01.12.2015, 19:52
Аватар для sovsem-nub
Профессор
Отправить личное сообщение для sovsem-nub Посмотреть профиль Найти все сообщения от sovsem-nub
 
Регистрация: 15.10.2014
Сообщений: 255

хм....
а если функцию во втрой раз запустить с задержкой все нормально и алерт один http://jsfiddle.net/tL532q27/4/

setTimeout(function(){
J50Npi.getJSON (urlCalcPost, dataCalcPost, CalcPost);
},800);

нужно как-то очередь организовать что-ли? как это можно по-нормальному сделать без задержки?

Последний раз редактировалось sovsem-nub, 01.12.2015 в 19:54.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как сделать чтобы цикл не запускался второй раз Brook Events/DOM/Window 5 12.05.2013 21:43
Почему не работает второй Event? JavaScriptProgrammer Events/DOM/Window 6 15.10.2012 04:30
Вывод выбранного элемента radio. Срабатывает только во второй раз. Mukhtar Events/DOM/Window 3 09.08.2012 12:19
не срабатывает на второй раз ajax[отправка формы] vovs jQuery 5 21.09.2010 12:12
Не выполнять ф-цию второй раз, пока она не проработает до конца. peter888 Элементы интерфейса 2 04.04.2010 13:04